“dbms_output.put_line”出错?

时间:2018-02-15 10:31:02

标签: sql oracle plsql oracle10g

我在Oracle中创建了一个触发器,我们正在使用语法。

我已多次通过代码检查程序运行它,但它一直说“dbms_output.put_line”有错误。

当我们尝试运行它时,代码说“使用编译错误创建了触发器”

CREATE TRIGGER date_trigger
  BEFORE INSERT ON PrintJob
  FOR EACH ROW
BEGIN
  IF StartDate > SysDate THEN 
  BEGIN
    dbms_output.put_line ('Please check date');
  END;

1 个答案:

答案 0 :(得分:2)

触发器只能通过命名它们来引用表列 - 您需要:旧的(或:新的)伪记录限定符,例如在此修改的示例中。并不是DBMS_OUTPUT.PUT_LINE不起作用;你写得正确,但应该用RAISE_APPLICATION_ERROR替换它。

SQL> CREATE TABLE printjob (startdate DATE);

Table created.

SQL> CREATE OR REPLACE TRIGGER date_trigger
  2     BEFORE INSERT
  3     ON PrintJob
  4     FOR EACH ROW
  5  BEGIN
  6     IF :new.StartDate > SYSDATE
  7     THEN
  8        -- dbms_output.put_line ('Please check date');
  9        RAISE_APPLICATION_ERROR (-20000, 'Please check date');
 10     END IF;
 11  END;
 12  /

Trigger created.

SQL> INSERT INTO printjob
  2       VALUES (DATE '2018-02-20');
INSERT INTO printjob
            *
ERROR at line 1:
ORA-20000: Please check date
ORA-06512: at "SCOTT.DATE_TRIGGER", line 5
ORA-04088: error during execution of trigger 'SCOTT.DATE_TRIGGER'


SQL>