一个建立触发器的问题有一个表,叫做TableList,这个表只有一列,列名叫做TableName,VARCHAR2(20)类型,
这一列保存的是一些表的名字,比如
TableName
---------
tbl_Table1
tbl_Table2
....
tbl_TabHaha我的目的是,当TableList这个表的某行被删除的时候,由这一行的TableName所命名的表也自动被删除。比如:当我们删除第二行的时候,表空间中的tbl_Table2这个表同时也被Drop了,请问各位有什么办法么?我本来是这么写的
CREATE OR REPLACE TRIGGER "MYTABLESPACE"."TRIG_TBLPHYMAP_ONDEL" AFTER DELETE
ON "USER_TABLE_PHYS_MAP"
FOR EACH ROW
DECLARE tblname VARCHAR(20);
BEGIN
tblname := :old.PHY_TABLE_NAME;
DROP TABLE tblname;
END;但是,我连编译都过不去,希望大虾们指点阿,先谢谢了。
这一列保存的是一些表的名字,比如
TableName
---------
tbl_Table1
tbl_Table2
....
tbl_TabHaha我的目的是,当TableList这个表的某行被删除的时候,由这一行的TableName所命名的表也自动被删除。比如:当我们删除第二行的时候,表空间中的tbl_Table2这个表同时也被Drop了,请问各位有什么办法么?我本来是这么写的
CREATE OR REPLACE TRIGGER "MYTABLESPACE"."TRIG_TBLPHYMAP_ONDEL" AFTER DELETE
ON "USER_TABLE_PHYS_MAP"
FOR EACH ROW
DECLARE tblname VARCHAR(20);
BEGIN
tblname := :old.PHY_TABLE_NAME;
DROP TABLE tblname;
END;但是,我连编译都过不去,希望大虾们指点阿,先谢谢了。
------------------------------
DINYA_TEST01
DINYA_TEST02SQL> select * from dinya_test01; ID NAME
---------- -----------------------------------------------
1 OKSQL>
SQL> create or replace trigger trg_test
2 after delete on dinya_main
3 for each row
4 declare
5 pragma autonomous_transaction;
6 v_sql varchar2(500);
7 v_table_name varchar2(30);
8 begin
9 v_table_name:=:old.table_name;
10 v_sql:='drop table '||v_table_name;
11 execute immediate v_sql;
12 exception
13 when others then
14 null;
15 end ;
16 /Trigger createdSQL> delete from dinya_main t where t.table_name ='DINYA_TEST01';1 row deletedSQL> commit;Commit completeSQL> select * from dinya_test01;select * from dinya_test01ORA-00942: 表或视图不存在SQL>
SQL>
OK