概述
ORACLE 触发器里面执行建表语句不成功,求解!!!
关注:186 答案:3 手机版
解决时间 2021-01-30 11:08
提问者北墓南笙
2021-01-29 13:49
代码如下:Create Or Replace Trigger Trg_InsUpdDel_test
After Insert or update or delete
on TEST
for each row
declare
v_str varchar(51);
begin
if Inserting then
v_str := 'CREATE TABLE test_c3 AS Select * from yy';
execute immediate v_str;
elsif Updating then
v_str := 'CREATE TABLE test_c4 AS Select * from yy';
execute immediate v_str;
elsif Deleting then
v_str := 'CREATE TABLE test_c5 AS Select * from yy';
execute immediate v_str;
end if;
end;
该语句(CREATE TABLE test_c4 AS Select * from yy)在SQL里是可执行的。
触发器不能调用或间接调用COMMIT,ROLLBACK等DCL语句。
一: 在触发器中使用DDL语句。 如 drop table t1 ,触发的时候会报错,
ORA-04092: cannot COMMIT in a trigger,因为DDL语句隐含commit。
二: 触发器的主体中使用了commit或rollback等DCL语句。ORA-04092:
cannot COMMIT in a trigger , 因为DML(delete/update/insert)触发器中
不能使用DDL(CREATE,DROP,ALTER)语句,也不能使用事务控制语句(DCL)
(ROLLBACK, COMMIT,SAVEPOINT)。特别注意的是,在触发器的主体中引用的
函数(function)/过程(procedure)中也不能有事物控制语句。
三: 注意: 系统级触发器(System Triggers)中可以使用DDL语句。
四: 处理方法: 去掉事务控制语句;如果procedure中必须有commit,那么可以
将commit 拿掉,由外部控制 。
最佳答案
二级知识专家注定要离开
2021-01-29 14:54
1、在触发器里面不能有提交事务;
execute immediate v_str;是一个提交事务
2、你应该建好这些表,触发器里面把这些数据拷贝到这个表里面即可!
insert into test_c4 select * from yy;
全部回答
1楼时光暗淡了承诺
2021-01-29 17:12
应该是权限不够 ,假设你创建此触发器的用户是xxx
登陆DBA用户或者具有DBA权限的用户,执行代码如下:
GRANT CREATE ANY TABLE TO xxx;
2楼一个人,一辈子
2021-01-29 16:02
create or replace trigger tr_salgrade_del
before delete on salgrade
begin
raise_application_error(-20000, '不能对salgrade进行删除操作。!');
end;
/
我要举报
如以上信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
推荐资讯
大家都在看
最后
以上就是斯文季节为你收集整理的oracle触发器为什么不打印,ORACLE 触发器里面执行建表语句不成功,求解!!!...的全部内容,希望文章能够帮你解决oracle触发器为什么不打印,ORACLE 触发器里面执行建表语句不成功,求解!!!...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复