Plsql 执行插入触发器时出错

Plsql 执行插入触发器时出错,plsql,oracle11g,Plsql,Oracle11g,我看代码没有任何问题。 试着做 抵销 我发现您的代码中有一点错误:请参见以下内容: DROP TRIGGER EPI_BOREHOLE_INI; CREATE OR REPLACE TRIGGER EPI_BOREHOLE_INI INSTEAD of Insert ON EPI_BOREHOLE for each row DECLARE V_ID number(10); V_USER varchar2(100); BEGIN if (:new.UBHI is null or :new.

我看代码没有任何问题。 试着做

抵销


我发现您的代码中有一点错误:请参见以下内容:

DROP TRIGGER EPI_BOREHOLE_INI;
CREATE OR REPLACE TRIGGER EPI_BOREHOLE_INI
INSTEAD of Insert ON EPI_BOREHOLE for each row
DECLARE
V_ID    number(10);
V_USER  varchar2(100);
BEGIN
if (:new.UBHI is null or :new.NAME is null or) then
    Raise_Application_Error(-20101, 'Insert failed. The key values of BOREHOLE(UBHI, NAME) cannot be null');
    end if;
begin
    select BOREHOLE_ID.nextval into V_ID from dual;
    SELECT USER INTO V_USER FROM DUAL;
    INSERT INTO EPI_BOREHOLE (ID, UBHI, NAME, INSERT_DATE ,INSERT_NAME, UPDATE_DATE,UPDATE_NAME) VALUES (V_ID,:NEW.UBHI, :NEW.NAME, SYSDATE, V_USER, SYSDATE, V_USER);
end;
END;

如果(:new.UBHI为null或:new.NAME为null或)那么如果您不想解释这是如何不起作用的,我们就不想费心去尝试和猜测问题可能是什么。当我单击“run”时…打开一个新窗口,它要求输入“enter bind variables”,我所有的语法都是正确的
:new.UBHI
?这是一个占位符,不是对正在插入的新记录的引用。去掉
。如果我删除了if语句,那么错误也会出现在命令窗口中。。SQL>设置定义关闭SQL>--在此处运行触发器块通常设置定义关闭用于替换变量。OP没有想到他正在使用什么工具,所以一切都有可能。打开一个新窗口,要求输入绑定变量SORA-00911:无效字符创建或替换触发器EPI_钻孔_INI,而不是在测试时为每行插入声明V_ID号(10);V_用户varchar2(100);如果(:new.A为null或:new.B为null)开始,则引发应用程序错误(-20101,'插入失败。钻孔的键值(UBHI,NAME)不能为null');如果结束;开始从dual选择1进入V_ID;插入EPI_钻孔(ID、UBHI、名称、插入日期、插入名称、更新日期、更新名称)值(V_ID、:NEW.A、:NEW.B、SYSDATE、USER、SYSDATE、USER);结束;结束;-----这是可行的,如果解决方案可行,您可以随时向上投票,并将更正后的代码重新发布,以供他人参考。
if (:new.UBHI is null or :new.NAME is null or) then  <-- An additional OR written.