Trigger in Prozedur erstellen
seppel
- datenbank
Hallo zusammen,
hat jemand von euch eine Idee wie ich in einer PL/SQL-Prozedur einen Trigger erstellen kann? Ich suche eine Möglichkeit einen CREATE TRIGGER... in einer Prozedur abzusetzen. In etwa so:
create or replace procedure test(trigger_name varchar2, table_name varchar2) as
begin
CREATE OR REPLACE TRIGGER trigger_name
BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
...
END;
end test;
Der Compiler meckert jedoch das Create innerhalb der Prozedur an.
("Error(5,5): PLS-00103: Fand das Symbol "CREATE" als eines der folgenden erwartet wurde: begin case declare end ......) Ich teste derzeit mit einer Oracle 10g EE.
Sinn dieser Übung ist das ich z.B. nach einem automatisierten Anlegen von Tabellen diese Prozedur für jede Tabelle aufrufen könnte - ohne mir jedes mal den Create Trigger umschreiben zu müssen.
Vielen Dank schon mal,
Seppel
Hallo,
hat jemand von euch eine Idee wie ich in einer PL/SQL-Prozedur einen Trigger erstellen kann? Ich suche eine Möglichkeit einen CREATE TRIGGER... in einer Prozedur abzusetzen.
Du kannst in einer Procedure keine DDL-Befehle ausführen, sondern nur DML-Befehle. Allerdings gibt's bei Oracle zumindest noch den Trick über EXECUTE IMMEDIATE.
Das sieht so aus, dass Du Dir den SQL-Befehl selbst zusammenbasteln musst als String und den dann an EXECUTE IMMEDIATE zur Ausführung übergeben kannst.
create or replace procedure test(trigger_name varchar2, table_name varchar2) as
begin
EXECUTE IMMEDIATE 'CREATE OR REPLACE TRIGGER ' || trigger_name || ' BEFORE INSERT ON ' || table_name || ' FOR EACH ROW BEGIN ... END;';
end test;
(oder so ähnlich)
Viele Grüße,
Christian
Vielen Dank, hat gefunzt auf die Weise.
Gruss,
Seppel