您的位置:首页 > 数据库 > Oracle

Oracle创建触发器遇到的问题

2017-10-25 00:00 288 查看
1.

错误描述

ORACLE-04082:NEW 或OLD引用不允许在表级触发器中

解决方案:

new和:old只能用于行级触发器,不能用于语句级触发器,只需要加FOR EACH ROW这一句话

create or replace trigger drs_asynchronous_trig
before insert on drs_asynchronous
FOR EACH ROW
declare
-- local variables here
v_trigger_user varchar2(100);
v_trigger_date date;
v_sqlcode varchar2(6);
v_sqlerrm varchar2(200);
v_error_comment varchar2(300);
begin
v_error_comment := 'before get_user';
v_trigger_user := user;
v_trigger_date := sysdate;
:new.FCU := v_trigger_user;
:new.FCD := v_trigger_date;
:new.LCU := v_trigger_user;
:new.LCD := v_trigger_date;
SELECT DRS_ASYNCHRONOUS_ID_SEQ.NEXTVAL INTO :NEW.PK_SERIAL# FROM DUAL;
exception
when others then
v_sqlcode := sqlcode;
v_sqlerrm := substr(sqlerrm, 1, 200);
INSERT INTO tr_error_log
(error_no,
error_message,
trigger_name,
trigger_user,
trigger_date,
error_comment
)
VALUES
(v_sqlcode,
v_sqlerrm,
'drs_asynchronous_trig',
v_trigger_user,
v_trigger_date,
v_error_comment);
end drs_asynchronous_trig;
2.简历触发器权限不足,需要一system的dba身份进去,进行修改赋值

conn / as sysdba;
grant create any trigger to kl;

如果怕麻烦,直接
grant dba to kl;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息