繁体   English   中英

Oracle SQL触发器-DBMS_OUTPUT.PUT_LINE

[英]Oracle SQL trigger - DBMS_OUTPUT.PUT_LINE

我正在数据库中创建一个触发器,遇到了两个无法修复的错误,我很确定这两个错误与我对DBMS_OUTPUT.PUT_LINE的使用有关,该语句的其余部分不会引起任何错误错误,尽管以前有过。

错误:

错误(5,3):PL / SQL:忽略了SQL语句

错误(5,15):PL / SQL:ORA-00903:无效的表名

码:

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 ,在这种情况下,只需执行INSERTUPDATE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM