我是 ORACLE SQL 的新手,我正在尝试创建一个触发器来生成 auto_incement 序列号作为我表中的主键,但不知道我犯了什么错误,因此我得到了:
执行部分保存事件时出错:错误代码=4098 ST= java.sql.BatchUpdateException: ORA-04098: trigger 'TNTCA.STAGING_TRIGGER_ERROR_REASON' 无效且重新验证失败\n,由:\"ORA-04098: trigger 'TNTCA.STAGING_TRIGGER_ERROR_REASON' 无效且重新验证失败\n\"
我的 SQL 语句是:
create global temporary table STAGING_ERROR_REASON ( STAGING_REASON_ID number(4) constraint STAGING_REASON_ID not null ,REASON nvarchar2(1024) not null ,constraint PK_STAGING_REASON_ID PRIMARY KEY(STAGING_REASON_ID) );
create sequence STAGING_SEQ_ERROR_REASON start with 1 increment by 1 minvalue 1 maxvalue 10000;
CREATE OR REPLACE TRIGGER "STAGING_TRIGGER_ERROR_REASON"
BEFORE INSERT ON STAGING_ERROR_REASON
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
if(:NEW.STAGING_REASON_ID is null) then
SELECT STAGING_SEQ_ERROR_REASON.NEXTVAL
INTO :NEW.STAGING_REASON_ID
END;
ALTER TRIGGER "STAGING_TRIGGER_ERROR_REASON" ENABLE;
你有两个错误:
IF
没有END IF
SELECT INTO
没有FROM
但是选择不是必需的,您可以简单地分配序列值:
CREATE OR REPLACE TRIGGER "STAGING_TRIGGER_ERROR_REASON"
BEFORE INSERT ON STAGING_ERROR_REASON
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
if :NEW.STAGING_REASON_ID is null then
:NEW.STAGING_REASON_ID := STAGING_SEQ_ERROR_REASON.NEXTVAL;
END IF; --<< missing
END;
/
不知道您在哪里如何运行你的PL / SQL,但你通常还需要一个/
在PL / SQL块的结束。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句