Oracle SQL 触发器 - DBMS_OUTPUT.PUT_LINE
Oracle SQL trigger - DBMS_OUTPUT.PUT_LINE
我正在我的数据库中创建一个触发器,我遇到了两个我无法修复的错误,我很确定这两个与我使用 DBMS_OUTPUT.PUT_LINE,语句的其余部分不会导致任何错误,尽管它以前有过。
错误:
Error(5,3): PL/SQL: SQL Statement ignored
Error(5,15): PL/SQL: ORA-00903: invalid table name
代码:
CREATE TRIGGER INVOICES
BEFORE INSERT OR UPDATE ON BRUINVOICE
FOR EACH ROW
BEGIN
IF :new.BRU_DATE < :new.BRU_PAID_DATE THEN
DBMS_OUTPUT.PUT_LINE('You cannot do that');
ELSE
INSERT INTO table BRUINVOICE
values
from inserted;
END IF;
END;
在记录级别验证方面,检查约束是比触发器更好的选择(性能方面):
ALTER TABLE bruinvoice
ADD CONSTRAINT validate_bru_date CHECK (BRU_DATE < BRU_PAID_DATE);
插入无效数据将引发如下错误消息:
scott@ORCL> insert into bruinvoice values ('21-DEC-14','20-DEC-14');
insert into bruinvoice values ('21-DEC-14','20-DEC-14')
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.VALIDATE_BRU_DATE) violated
我完全同意 cstotzer 的观点,检查约束在您的情况下要好得多,应该是首选的方式。但是,仅供参考这将是触发器语法:
CREATE TRIGGER INVOICES
BEFORE INSERT OR UPDATE ON BRUINVOICE
FOR EACH ROW
BEGIN
IF :new.BRU_DATE < :new.BRU_PAID_DATE THEN
RAISE_APPLICATION_ERROR(-20001, 'You cannot do that');
END IF;
END;
您不需要任何 ELSE
,您的 INSERT
或 UPDATE
将在这种情况下被简单地执行。
我正在我的数据库中创建一个触发器,我遇到了两个我无法修复的错误,我很确定这两个与我使用 DBMS_OUTPUT.PUT_LINE,语句的其余部分不会导致任何错误,尽管它以前有过。
错误:
Error(5,3): PL/SQL: SQL Statement ignored
Error(5,15): PL/SQL: ORA-00903: invalid table name
代码:
CREATE TRIGGER INVOICES
BEFORE INSERT OR UPDATE ON BRUINVOICE
FOR EACH ROW
BEGIN
IF :new.BRU_DATE < :new.BRU_PAID_DATE THEN
DBMS_OUTPUT.PUT_LINE('You cannot do that');
ELSE
INSERT INTO table BRUINVOICE
values
from inserted;
END IF;
END;
在记录级别验证方面,检查约束是比触发器更好的选择(性能方面):
ALTER TABLE bruinvoice
ADD CONSTRAINT validate_bru_date CHECK (BRU_DATE < BRU_PAID_DATE);
插入无效数据将引发如下错误消息:
scott@ORCL> insert into bruinvoice values ('21-DEC-14','20-DEC-14');
insert into bruinvoice values ('21-DEC-14','20-DEC-14')
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.VALIDATE_BRU_DATE) violated
我完全同意 cstotzer 的观点,检查约束在您的情况下要好得多,应该是首选的方式。但是,仅供参考这将是触发器语法:
CREATE TRIGGER INVOICES
BEFORE INSERT OR UPDATE ON BRUINVOICE
FOR EACH ROW
BEGIN
IF :new.BRU_DATE < :new.BRU_PAID_DATE THEN
RAISE_APPLICATION_ERROR(-20001, 'You cannot do that');
END IF;
END;
您不需要任何 ELSE
,您的 INSERT
或 UPDATE
将在这种情况下被简单地执行。