Newsgroup: it.comp.lang.delphi
Titolo: utile routine per cancellare da Firebird una SP con dipendenze

probabilmente ero l'unico a non conoscere il trucco, ma confesso di
aver perso molte ore (negli ultimi 2-3 anni) per capire come
cancellare da Firebird una SP con dipendenze .
Come sapete, uno scrive 
drop procedure PIPPO
e Firebird risponde con
there are 12 dependencies
ma mica ti dice QUALI sono le dipendenze.
La routine che segue vi dice QUALI SP dovete cancellare a cascata per
cancellare anche PIPPO:
create table tmp (               /* prima dovete creare questa tabella
*/
id_rec integer,
SP char(31),
visited smallint
)
create procedure DropSP  (  DEP char(31)       /* questa e' la
procedura vera e propria */
)
returns
   (command varchar(100))
as
   declare variable sp char(31);
   declare variable i integer;
   declare variable mem char(31);
begin
   mem=:dep;
   i=0;
   delete from tmp;
   while (dep is not null) do
   begin
      for
      select distinct a.RDB$DEPENDENT_NAME
      from RDB$DEPENDENCIES a
      where a.RDB$DEPENDED_ON_NAME=:dep
      and (not exists (  select 1
                           from tmp b
                           where b.sp=a.RDB$DEPENDENT_NAME
                        )
            )
      into :sp
      do
      begin
         i=i+1;
         insert into tmp (
         id_rec,
         sp,
         visited
         )
         values (
         :i,
         :sp,
         0
         );
         command='drop procedure ' || :sp || ';' ;
         suspend;
      end
      dep=null;
      select first 1 sp
      from tmp
      where visited=0
      order by id_rec desc
      into :dep;
      update tmp set
      visited=1
      where sp=:dep;
   end
   command='drop procedure ' || :mem || ';';
   suspend;
end
che poi userete cosi':
select * from DropSP  ('PIPPO')
Attenzione! Se scrivete
execute procedure DropSP  ('PIPPO')
correte il rischio di diventare matti: lascio questa dimostrazione
come utile esercizio :)
BTW: se riuscite a migliorare il codice, fatemi sapere.
Peppe Polpo

bello! ma non era + semplice vedere il tabsheet delle dipendenze da
ibconsole?
AS

e te pareva...
Che cos'e' IBConsole ?
Lo sapevo che sbagliavo tutto... :)
Peppe

la console x gestire interbase.
Ne esiste una versione anche per fb.
Hai una struttura ad albero che raggruppa gli oggetti del db x
tipologia.
Se vedi le property di una stored procedure ti mostra le dipendenze in
entrambi i sensi:
oggetti referenziati dalla procedure
oggetti che REFERENZIANO la procedure.
AS

dove posso scaricare questo bel prodotto ?
(Mi interessa soprattutto la versione per FB)
Grazie
Peppe

bhe, trattadosi del database firebird ovviamente da 
www.playboy.com
..
Ovvio, no?
AS

Ovvio, no?
nel sito indicato ho trovato un sacco di belle cose, ma non ibconsole
:)
Seriamente, ho trovato su google una montagna di informazioni
piuttosto svianti. 
Anche alcuni download, ma le versioni che ho potuto scaricare fanno
poco e niente, e certamente non listano le dipendenze di una SP.
Da dove hai scaricato la tua versione ?
Grazie
Peppe

hai provato da qui?
http://info.borland.com/devsupport/interbase/opensource/
AS

e questo qui?
http://www.flamerobin.org/

Qui hai un elenco di applicazioni
http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_admin_tools
Io ti consiglio IBExpert Personal Edition
(
http://www.hksoftware.net/download/ibep_2005.8.8.1_full.exe
), oppure
IBQuery due ottimi prodotti, li trovi entrambi elencati nel sito.
Massimo

perfetto.
Grazie a tutti
Peppe