我在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;
答案 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>