【发布时间】:2012-02-09 17:04:48
【问题描述】:
我在运行这段代码时遇到了问题。它说触发器是用编译错误创建的,但没有解释什么是错误的,也没有给出任何输出。下面是我给出的代码和错误。我在 Oracle 11g R1 上并且正在使用 PL/SQL。
CREATE OR REPLACE TRIGGER checkRecommendedAge
BEFORE INSERT OR UPDATE ON Loan
FOR EACH ROW
DECLARE
borAge number;
ex exception;
BEGIN
SELECT count(*) INTO borAge
FROM Loan
WHERE dateOut =: new.dateOut;
IF borAge < 18 THEN
dbms.output.put_line('Row added to Book table succesful');
ELSE
raise ex;
END IF;
EXCEPTION
WHEN EX THEN
raise_application_error("Error");
END;
/
错误:
Warning: Trigger created with compilation errors.
SQL> SHOW ERRORS
Errors for TRIGGER CHECKRECOMMENDEDAGE:
LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0 PLS-00801: internal error [ph2csql_strdef_to_diana:bind]
6/2 PL/SQL: SQL Statement ignored
7/7 PL/SQL: ORA-06544: PL/SQL: internal error, arguments:
[ph2csql_strdef_to_diana:bind], [], [], [], [], [], [], []
10/3 PL/SQL: Statement ignored
10/3 PLS-00201: identifier 'DBMS.OUTPUT' must be declared
17/2 PL/SQL: Statement ignored
17/27 PLS-00201: identifier 'Error' must be declared
任何帮助将不胜感激
谢谢
【问题讨论】:
-
编译后尝试发出
SHOW ERRORS。 -
@Cybernate 嗨,谢谢!我更新了原帖
-
@Brian - 你确定没有复制和粘贴错误吗?错误消息引用了标识符
dbms.output,这意味着您在引用dbms_output包时打错了字。但是您的代码似乎没有那个错字。当该文本未出现在发布的代码中的任何位置时,错误消息还引用了标识符Error。另外,您能否发布完整的触发器定义,包括CREATE? -
@Justin Cave 我该如何做完整的触发操作?
-
@Brian - 我不确定我是否遵循了这个问题。据推测,您正在通过编写以
CREATE [OR REPLACE] TRIGGER <<trigger name>>开头的语句来创建触发器,对吧?只需在此处复制并粘贴整个CREATE TRIGGER语句,而不是仅发布以DECLARE开头的触发器正文。
标签: oracle plsql triggers oracle11g sqlplus