- 论坛徽章:
- 0
|
请教NYFOR等诸位大虾
看你的错误提示应该是你的数据库版本太低,execute immediate 需要8i以上的企业版或个人版。
你可以使用dbms_sql程序包。
示例:
create table t(id number primary key);
insert into t values(1);
commit;
insert into t values(1);
declare
pragma autonomous_transaction;
l_cur integer := dbms_sql.open_cursor;
l_ret integer;
begin
dbms_sql.parse(l_cur,'alter table t disable primary key',dbms_sql.native);
l_ret := dbms_sql.execute(l_cur);
dbms_sql.close_cursor(l_cur);
end;
/
insert into t values(1);
alter table t enable primary key;
select * from t;
delete t where rownum = 1;
alter table t enable primary key;
drop table t;
以上示例代码并没有写在trigger中,其用法一样。
警告:
由于我现在并不太清楚你如何操作那些表的数据,有一点必须告诉你。
除了在该trigger的自治事务中,你在主事务中不得有对alter 到的table有任何的dml操作,否则将会引起dead lock,因为dml会在表上放置tm锁定,不允许别的事务进行ddl操作。 |
|