【问题标题】:Trigger success with compilation error oracle使用编译错误触发成功 oracle
【发布时间】:2019-12-18 19:11:50
【问题描述】:

我有这些表

PUBRED (cod_pub, title, year, type, medium)
AUTHOR (login, name, surname, institution, country)
AUTHOR_ONE (login, cod_pub)
PUB_CITA (cod_pub, cod_pub_cited)

而且我必须让出版物的引用总是在它之后

我有以下触发器,但它给了我编译错误,我在其他问题中没有发现任何错误

Create or replace trigger works_trg_02
Before insert or update on pub_cita
For each row
Declare
Cnt number;
Begin
Select count (*) into cnt
      from pubred pr
      inner join pub_cita pc
         on :new.pc.cod_pub = pr.cod_pub
      inner join pubred pr2
         on :new.pc.cod_pub_cited = pr2.cod_pub
      where pr.year < pr2.year then 1
Else 0 end = 0;
If cnt <> 0 then
Raise_application_error ('-20001', 'Not possible');
End if;
End works_trg_02;
/

我从“ORA-24344:编译错误成功”中得到典型错误

在进行插入以证明这一点时,我得到'ORA-04098:触发器'FIDDLE_WIXYFBGEUZDXILZQBEGR.WORKS_TRG_02'无效并且重新验证失败'

我在此处搜索了其他类似的问题,以调整我的初始解决方案,但我没有成功,我相信所有内容都是正确的。

【问题讨论】:

  • 这部分where pr.year &lt; pr2.year then 1 Else 0 end = 0; 没有任何意义。除此之外,您不能从同一表的触发器内的pub_cita 中选择pub_cita

标签: oracle plsql ddl


【解决方案1】:

首先,当您获得ORA-24344: success with compilation error 时,您应该运行show errors,或查询user_errorsall_errors 视图以找到您的实际错误消息。

其次,这是错误的::new.pc.cod_pub:new 变量是 record,当前正在插入的表 (pub_cita) 的行。你可以直接说:new.cod_pub

第三,触发器不能查询它自己的表——所以你的 SELECT 查询中不能有pub_cita。这很好,您可以使用:new 参考它。

第四,这是什么?

where pr.year < pr2.year then 1
Else 0 end = 0;

我认为您开始了CASE 声明,然后删除了其中的一部分?这不是有效的语法。

看看这是否适合你:

Create or replace trigger works_trg_02
Before insert or update on pub_cita
For each row
Declare
    Cnt number;
Begin
    Select count (*) into cnt
          from pubred pr
          inner join pubred pr2
             on :new.cod_pub_cited = pr2.cod_pub
          where pr.year < pr2.year
            and pr.cod_pub = :new.cod_pub
          ;
    If cnt <> 0 then
        Raise_application_error ('-20001', 'Not possible');
    End if;
End works_trg_02;
/

【讨论】:

    猜你喜欢
    • 2014-11-29
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    相关资源
    最近更新 更多