Oracle配置。 “创建或替换”功能创建无效对象

时间:2018-11-23 07:52:11

标签: oracle plsql oracle11g configuration database-trigger

我最近将数据库移到了新服务器(均为Oracle 11g)上。 在新主机中,有一种奇怪的行为,那就是每当我运行以下命令时:

Linking.addEventListener

创建的触发器无效,日志中没有任何错误。我试图重新编译,但仍然无效。

仅在“创建或替换”功能中发生。如果我放下触发器并再次重新创建,它将是有效的。

我的问题是,我配置不正确吗?我该如何检查?谢谢。

1 个答案:

答案 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> /

那么,这怎么了?

  • 创建(或替换)想要知道要创建的内容。 “ test_trigger”?就Oracle而言,可能是“ mickey_mouse”,结果将是相同的。缺少的是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>

因此,您似乎误解了现实。