Quoi, tu ne connais pas PB ? Va falloir parcourir tout le forum alors !

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.
  • Index
  •  » Base de données
  •  » Récupérer le nom des tables utilisée dans une procédure stockée.

#1 23-10-2009 08:24:42

julien  
Membre completement Geek
Date d'inscription: 02-09-2008
Messages: 127
Pépites: 10,665
Banque: 0

Récupérer le nom des tables utilisée dans une procédure stockée.

Bonjour a tous,

je voudrais savoir s'il était possible de lister les tables utilisées dans une procédure stockée ? Ou si il existe un utilitaire capable de le faire.

Merci

Hors ligne

 

#2 23-10-2009 08:31:34

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: Récupérer le nom des tables utilisée dans une procédure stockée.

Pour Oracle, tu as Toad qui te permet de faire ça très facilement:

Database => Schema Browser => Procedure => onglet "Deps(Uses)"


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#3 23-10-2009 08:37:31

julien  
Membre completement Geek
Date d'inscription: 02-09-2008
Messages: 127
Pépites: 10,665
Banque: 0

Re: Récupérer le nom des tables utilisée dans une procédure stockée.

Je suis sur ASE isql avec une base Sybase.

Hors ligne

 

#4 23-10-2009 08:54:49

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: Récupérer le nom des tables utilisée dans une procédure stockée.

Je ne connais pas ASE, mais je sais que CAST marche dessus.
Par contre, c'est pas donné.... Et puis, c'est quand même de la grosse artillerie


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#5 23-10-2009 09:02:23

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: Récupérer le nom des tables utilisée dans une procédure stockée.

Bonjour,

Sous ASE, il suffit de se connecter avec Sybase Central pour accéder au code source de la procédure stockée.

En listant le code source, tu devrais déterminer les tables utilisées dans la procédure stockée.

Hors ligne

 

#6 23-10-2009 09:12:04

johnpelu  
Membre Power Geek
Date d'inscription: 17-10-2008
Messages: 179
Pépites: 677
Banque: 0

Re: Récupérer le nom des tables utilisée dans une procédure stockée.

Bonjour, ca ne répond pas réellement à ton souci mais tu peux utiliser la commande
'sp_depends ' , qui va te donner les dépendances pour chacun de tes objets

Hors ligne

 

#7 12-03-2010 20:54:21

DrHouse  
Membre
Lieu: Sophia-Antipolis
Date d'inscription: 04-09-2008
Messages: 7
Pépites: 11,046
Banque: 0

Re: Récupérer le nom des tables utilisée dans une procédure stockée.

Voici un code qui prend en paramètre le nom du procédure et retourne les tables réferencées.
Pour ceux qui reconnaitrons , c'est effectivement sp_depends un peu nettoyée.
Si ça peu aider.

Code: mssql

If Exists(Select name
From sysobjects
Where name='procedure_linked_tables'
And (type= 'P')
And uid = User_id())
Drop Procedure procedure_linked_tables
go

Create Proc procedure_linked_tables (
  @objname varchar(92)
                             )
As
Begin
declare @found_some   bit    /* flag for table dependencies found */
  , @msg    varchar(1024)
  , @sptlang  int    /* current sessions language */
  , @length  int
  , @colid   int    /* column id from syscolumns */
  , @objid   int

if @@trancount = 0
begin
  set chained off
end

set transaction isolation level 1
set nocount on

/*
**  Make sure the @objname is local to the current database.
*/
if @objname like "%.%.%" and
  substring(@objname, 1, charindex(".", @objname) - 1) != db_name()
begin
  /*
  ** 17460, "Object must be in the current database."
  */
  raiserror 17460
  return (1)
end

/*
**  See if @objname exists.
*/
if not exists (select id
    from sysobjects
      where id = object_id(@objname) and type = 'P')    -- uniquement les procédures
begin
  /*
  ** 17461, "Object does not exist in this database."
  */
  raiserror 17461
  return (1)
end

/*
**  Initialize @found_some to indicate that we haven't seen any dependencies.
*/
select @found_some = 0

/*
**  Print out the particulars about the local dependencies.
*/
if exists (select *
    from sysdepends
      where id = object_id(@objname) )
begin
  /*
  ** 17462, "Things the object references in the current database."
  */
  exec sp_getmessage 17462, @msg output
  print @msg

  select @sptlang = @@langid
  if @@langid != 0
  begin
    if not exists (
      select * from master.dbo.sysmessages where error
      between 17010 and 17014
      and langid = @@langid)
        select @sptlang = 0
    else
    if not exists (
      select * from master.dbo.sysmessages where error
      between 17100 and 17109
      and langid = @@langid)
        select @sptlang = 0
  end

  begin
  select @length = max(datalength(s.name + "." + o.name))
        from sysobjects o,
      sysdepends d, sysusers s
        where o.id = d.depid
      and d.id = object_id(@objname)
      and o.uid = s.uid
      and o.type = 'U'      --DrHouse

  if (@length > 40)
      select object = s.name + "." + o.name,
    type = convert(char(16), m0.description),
    updated = convert(char(10), m1.description),
    selected = convert(char(10), m2.description)
      from sysobjects o, master.dbo.spt_values v,
        sysdepends d, master.dbo.spt_values u,
        master.dbo.spt_values w,
        sysusers s, 
        master.dbo.sysmessages m0, 
        master.dbo.sysmessages m1, 
        master.dbo.sysmessages m2
      where o.id = d.depid
        and o.sysstat & 15 = v.number and v.type = 'O'
        and v.msgnum = m0.error
        and isnull(m0.langid, 0) = @sptlang
        and u.type = 'B' and u.number = d.resultobj
        and u.msgnum = m1.error
        and isnull(m1.langid, 0) = @sptlang
        and w.type = 'B' and w.number = d.readobj
        and w.msgnum = m2.error
        and isnull(m2.langid, 0) = @sptlang
        and d.id = object_id(@objname)
        and o.uid = s.uid
        and o.type = 'U' --Dr House

  else
      select object = convert(char(40), (s.name + "." + o.name)),
    type = convert(char(16), m0.description),
    updated = convert(char(10), m1.description),
    selected = convert(char(10), m2.description)
      from sysobjects o, master.dbo.spt_values v,
        sysdepends d, master.dbo.spt_values u,
        master.dbo.spt_values w,
        sysusers s, 
        master.dbo.sysmessages m0, 
        master.dbo.sysmessages m1, 
        master.dbo.sysmessages m2
      where o.id = d.depid
        and o.sysstat & 15 = v.number and v.type = 'O'
        and v.msgnum = m0.error
        and isnull(m0.langid, 0) = @sptlang
        and u.type = 'B' and u.number = d.resultobj
        and u.msgnum = m1.error
        and isnull(m1.langid, 0) = @sptlang
        and w.type = 'B' and w.number = d.readobj
        and w.msgnum = m2.error
        and isnull(m2.langid, 0) = @sptlang
        and d.id = object_id(@objname)
        and o.uid = s.uid
        and o.type = 'U' -- DrHouse
  end
  select @found_some = 1
end

/*
**  Did we find anything in sysdepends?
*/
if (@found_some = 0)
begin
  /*
  ** 17464, "Object doesn't reference any object and no objects reference it."
  */
  exec sp_getmessage 17464, @msg output
  print @msg
end


End

Il vaut mieux 1 qui sait que 10 qui cherchent, bon des fois on est 11 à chercher ...

Hors ligne

 

#8 18-03-2010 09:28:03

Doctor Z  
Moderador
Award: PanchoeNacho
Lieu: Vale Figueira (Lisbonne)
Date d'inscription: 30-05-2006
Messages: 756
Pépites: 1,003,082
Banque: 877,135,234,297,804

Re: Récupérer le nom des tables utilisée dans une procédure stockée.

Bonjour,





Merci.

Doctor Z.


http://www.userbars.com/i/543606.gif
Olivença, l'oubliée
Si tu es alentejane, que Dieu te bénisses, si tu ne l'es pas, que Dieu te pardonnes.

Hors ligne

 

#9 18-03-2010 16:04:42

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Récupérer le nom des tables utilisée dans une procédure stockée.

bel effort Dr.Z, mais en l'occurrence c'est la balise code=mssql


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#10 18-03-2010 16:27:31

Doctor Z  
Moderador
Award: PanchoeNacho
Lieu: Vale Figueira (Lisbonne)
Date d'inscription: 30-05-2006
Messages: 756
Pépites: 1,003,082
Banque: 877,135,234,297,804

Re: Récupérer le nom des tables utilisée dans une procédure stockée.

erasorz a écrit:

bel effort Dr.Z, mais en l'occurrence c'est la balise code=mssql


http://www.userbars.com/i/543606.gif
Olivença, l'oubliée
Si tu es alentejane, que Dieu te bénisses, si tu ne l'es pas, que Dieu te pardonnes.

Hors ligne

 
  • Index
  •  » Base de données
  •  » Récupérer le nom des tables utilisée dans une procédure stockée.

Pied de page des forums

Propulsé par FluxBB 1.2.22