| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.server -> Re: Trigger Script Generation
Here's an Oracle7 script:
Define Valid_ = 'N' -- 'Y' if you only want the valid objects
Set echo OFF
Set embedded ON
Set feedback OFF
Set heading OFF
Set linesize 2000
Set long 32760
Set newpage 0
Set pagesize 0
Set recsep OFF
Set space 0
Set termout OFF
Set trimout ON
Set trimspool ON
BTitle OFF
TTitle OFF
Spool crtrigger.sql
Drop table mcsql
/
Create table mcsql
(id number, subid number,
codesql varchar2(2000) /* LONG impossible a cause de l'affichage */,
primary key (id, subid))
/
Declare
/* Curseur des objets a recreer */
Cursor ct is
select table_owner, table_name, trigger_name, description, trigger_body
from user_objects obj2, user_triggers trg, user_objects obj
where obj2.status like decode ('&Valid_', 'Y', 'VALID', '%')
and obj2.object_name = trg.trigger_name
and trg.status like decode ('&Valid_', 'Y', '%ABLED', '%')
and trg.table_owner = USER
and trg.table_name = obj.object_name
and obj.status like decode ('&Valid_', 'Y', 'VALID', '%')
and obj.object_type = 'TABLE'
order by table_owner, table_name, trigger_name;
/* Curseur des objets invalides */
select table_owner, table_name, trigger_name,
obj2.status||' - '||trg.status
from user_objects obj2, user_triggers trg, user_objects obj
where ( trg.status = 'ERROR' or obj2.status != 'VALID' )
and obj2.object_name = trg.trigger_name
and trg.table_owner = USER
and trg.table_name = obj.object_name
and obj.status = 'VALID'
and obj.object_type = 'TABLE'
and '&Valid_' = 'Y'
order by table_owner, table_name, trigger_name;
nomTrigger user_triggers.trigger_name%TYPE;
nomOwner user_triggers.table_owner%TYPE;
nomTable user_triggers.table_name%TYPE;
description varchar2(2000);
Open ct;
Open ct2;
Fetch ct into nomOwner, nomTable, nomTrigger, description, source;
Fetch ct2 into nomOwner2, nomTable2, nomTrigger2, erreur;
Loop
Exit when ( ct%NOTFOUND and ct2%NOTFOUND );
If ( ct%NOTFOUND
or ( ct2%FOUND
and nomOwner2||'#'||nomTable2||'#'||nomTrigger2
< nomOwner||'#'||nomTable||'#'||nomTrigger ) ) then
valeur := '
-- '||nomTrigger2||' ('||nomOwner2||'.'||nomTable2||') -> '||erreur;
Insert into mcsql values (id, 0, valeur);
Fetch ct2 into nomOwner2, nomTable2, nomTrigger2, erreur;
Else
codeSql := '
Create or replace trigger '||description;
codeSql := codeSql||substr(source,1,length(source)-1)||'/';
subid := 0;
i := 1;
lg := 0;
espace := False;
While ( i <= length (codeSql) ) loop
If ( (i+2000) <= length (codeSql) ) then
lg := 2000;
While ( substr(codeSql, i+lg, 1) != '
' and lg > 0 ) loop
lg := lg - 1;
End loop;
If ( lg = 0 ) then
lg := 2000;
While ( substr(codeSql, i+lg, 1) != ' ' and lg > 0 ) loop
lg := lg - 1;
End loop;
If ( lg = 0 ) then
lg := 2000;
Else
lg := lg - 1;
espace := True;
End if;
Else
lg := lg - 1;
espace := True;
End if;
Else
lg := length (codeSql) - i + 1;
End if;
If ( lg > 0 ) then
valeur := substr(codeSql, i, lg);
Insert into mcsql values (id, subid, valeur);
subid := subid + 1;
i := i + lg;
End if;
If ( espace ) then
i := i + 1;
End if;
End loop;
Fetch ct into nomOwner, nomTable, nomTrigger, description, source;
End if;
id := id + 1;
Sorry for french comments and variable names.
--
Have a nice day
Michel
Jim Katsos <jkatsos_at_oz.quests.com> a écrit dans le message :
dexe4.19171$lv5.75531_at_news-server.bigpond.net.au...
> Does anyone have some pl/sql which generates trigger ddl from the
> dba_triggers view.
>
![]() |
![]() |