| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.server -> plsql trigger ddl extraction
Below I have written some pl/sql to extract trigger definitions for a
table.
Can somebody tell me:
I would do this with a simple select, but I can't seem to solve the formatting problems.
/ Charles J. Fisher | Really, I'm not out to destroy Microsoft. / / cfisher_at_rhadmin.org | That will just be a completely unintentional / / http://rhadmin.org | side effect. -Linus Torvalds / --------------------------------------------------------------------------
set serveroutput on size 1000000
DECLARE
mydesc user_triggers.description%TYPE;
mywhen user_triggers.when_clause%TYPE;
l_cursor integer default dbms_sql.open_cursor;
l_buflen number := 250;
l_long_val varchar2(250);
l_long_len number;
l_curpos number;
junk integer;
BEGIN
dbms_sql.parse(l_cursor,
'select description, when_clause, trigger_body
from user_triggers
where table_name = ''MYTAB''',
dbms_sql.native);
dbms_sql.define_column(l_cursor, 1, mydesc, 2000);
dbms_sql.define_column(l_cursor, 2, mywhen, 2000);
dbms_sql.define_column_long(l_cursor, 3);
junk := DBMS_SQL.EXECUTE(l_cursor);
loop
if dbms_sql.fetch_rows(l_cursor) > 0 then
dbms_sql.column_value(l_cursor, 1, mydesc);
dbms_output.put('create or replace trigger ');
l_long_val := mydesc;
l_long_len := length(mydesc);
for junk in 1..l_long_len loop
if substr(l_long_val,junk,1) = chr(10) then
dbms_output.put_line('');
else
dbms_output.put(substr(l_long_val,junk,1));
end if;
end loop;
dbms_sql.column_value(l_cursor, 2, mywhen);
if mywhen is not null then
dbms_output.put('WHEN (');
l_long_val := mywhen;
l_long_len := length(mywhen);
for junk in 1..l_long_len loop
if substr(l_long_val,junk,1) = chr(10) then
dbms_output.put_line('');
else
dbms_output.put(substr(l_long_val,junk,1));
end if;
end loop;
dbms_output.put_line(')');
end if;
l_curpos := 0;
loop
dbms_sql.column_value_long(l_cursor,
3,
l_buflen,
l_curpos,
l_long_val,
l_long_len);
l_curpos := l_curpos + l_long_len;
for junk in 1..l_long_len loop
if substr(l_long_val,junk,1) = chr(10) then
dbms_output.put_line('');
else
dbms_output.put(substr(l_long_val,junk,1));
end if;
end loop;
dbms_output.put_line('');
exit when l_long_len = 0;
end loop;
dbms_output.put_line('/');
else
exit;
end if;
end loop;
dbms_sql.close_cursor(l_cursor);
![]() |
![]() |