我最近将数据库移到了新服务器(均为Oracle 11g)上。 在新主机中,有一种奇怪的行为,那就是每当我运行以下命令时:
Linking.addEventListener
创建的触发器无效,日志中没有任何错误。我试图重新编译,但仍然无效。
仅在“创建或替换”功能中发生。如果我放下触发器并再次重新创建,它将是有效的。
我的问题是,我配置不正确吗?我该如何检查?谢谢。
答案 0 :(得分:2)
您发布的代码不会编译,不会在我知道的任何Oracle数据库中编译。为什么?语法错误。
这是一个示范:
SQL> create or replace test_trigger
2 before insert or update
3 on test_table
4 for each row
5 begin
6 select 1 from dual;
create or replace test_trigger
*
ERROR at line 1:
ORA-00922: missing or invalid option
SQL> end;
SP2-0042: unknown command "end" - rest of line ignored.
SQL> /
那么,这怎么了?
trigger
关键字SELECT
中的PL/SQL
需要一个INTO
子句,以便您可以将结果存储到某些内容中declare
一个变量实际上,这里是编译的代码:
SQL> create or replace trigger test_trigger --> this
2 before insert or update
3 on test_table
4 for each row
5 declare
6 l_dummy number; --> this
7 begin
8 select 1
9 into l_dummy --> this
10 from dual;
11 end;
12 /
Trigger created.
SQL>
因此,您似乎误解了现实。