我试图触发更新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;
我得到的错误是他们的命令没有正确结束。
答案 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;