sql - Oracle SQL 触发器 - DBMS_OUTPUT.PUT_LINE

标签 sql oracle plsql triggers dbms-output

我在我的数据库中创建了一个触发器,我遇到了两个我无法修复的错误,我很确定这两个与我对 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

关于sql - Oracle SQL 触发器 - DBMS_OUTPUT.PUT_LINE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28179312/

相关文章:

SQL 服务器 : check for existing entry before UPDATE

java - 如何将 hibernate 关联映射从 'one to many' 更改为 'many to many'?

oracle - 使用具有父类(super class)型属性的类型创建对象表

sql - 如何在Oracle中获得字符串的最右边10个位置

oracle - 在 SQL Developer 中打印变量的值

SQL Select 语句返回同一表中下一个日期时间的分钟差异

sql - 如何过滤掉特定列下具有重复值的数据?

xml - 基于 XML 文件创建 Oracle 表

oracle - TransactionScope 和存储过程?

甲骨文程序