Oracle PL / SQL触发器错误

时间:2013-03-26 20:53:59

标签: oracle plsql

我试图触发更新reportnum和后缀并与Coldfusion ORM兼容。为了使用单个键对表格起作用,我使用了下面例子的第一部分。在此表中,如果给出报告编号,我需要将后缀更新为下一个值。

CREATE TABLE tb1 ( reportnum NUMBER, suffix NUMBER );

CREATE SEQUENCE seq1 START WITH 1;

CREATE OR REPLACE TRIGGER "TRG1_TB1" BEFORE INSERT ON
tb1 FOR EACH ROW
BEGIN
    IF :NEW.reportnum IS NULL  THEN
        SELECT seq1.NEXTVAL INTO :NEW.reportnum FROM dual;

    ELSIF :NEW.REPORTNUM = ''  THEN
        SELECT seq1.NEXTVAL INTO :NEW.reportnum FROM dual;

    ELSIF :NEW.suffix = '' THEN
        SELECT MAX(suffix)+1 INTO :NEW.suffix FROM tb1 WHERE reportnum = :NEW.reportnum

    ELSIF :NEW.suffix = NULL THEN
        SELECT MAX(suffix)+1 INTO :NEW.suffix FROM tb1 WHERE reportnum = :NEW.reportnum

    END IF; 
END;

我得到的错误是他们的命令没有正确结束。

2 个答案:

答案 0 :(得分:1)

在后缀查询的末尾添加;

 ELSIF :NEW.suffix = '' THEN
    SELECT MAX(suffix)+1 INTO :NEW.suffix 
    FROM tb1 WHERE reportnum = :NEW.reportnum;

ELSIF :NEW.suffix = NULL THEN
    SELECT MAX(suffix)+1 INTO :NEW.suffix 
    FROM tb1 WHERE reportnum = :NEW.reportnum;

您还可以通过执行以下操作减少两者的if语句数: 例如:

 IF coalesce(:NEW.reportnum,-1) = -1  THEN
    SELECT seq1.NEXTVAL INTO :NEW.reportnum FROM dual;  

ELSIF coalesce(:NEW.suffix,-1) = -1 THEN
    SELECT MAX(suffix)+1 INTO :NEW.suffix 
    FROM tb1 WHERE reportnum = :NEW.reportnum;
END IF; 

答案 1 :(得分:0)

您没有收到Oracle PL / SQL触发器错误,这是语法错误。 试试这个:

CREATE TABLE tb1(reportnum NUMBER,后缀NUMBER);

创建序列seq1 START WITH 1;

在插入之前创建或替换TRIGGER“TRG1_TB1” tb1 FOR EACH ROW 开始     如果:NEW.reportnum是空的那么         SELECT seq1.NEXTVAL INTO:NEW.reportnum FROM dual;

ELSIF :NEW.suffix is NULL THEN
    SELECT MAX(suffix)+1 INTO :NEW.suffix FROM tb1 WHERE reportnum = :NEW.reportnum;

END IF;

END;