【问题标题】:i dont know what happening right now with my trigger PL/SQL script [closed]我不知道我的触发器 PL/SQL 脚本现在发生了什么[关闭]
【发布时间】:2022-01-22 00:48:48
【问题描述】:

请修复此错误

CREATE OR REPLACE TRIGGER BELITIKET 
AFTER INSERT ON PENUMPANG FOR EACH ROW
BEGIN
  INSERT INTO TIKET(NIK,NAMA_PENUMPANG, NAMA_KERETA,RUTE,HARGA)
  SELECT p.NIK, p.NAMA, k.NAMA_KERETA, p.RUTE, k.HARGA
  FROM PENUMPANG p, KERETA_API k
  WHERE p.RUTE = k.RUTE and p.WAKTU = k.WAKTU_KEBERANGKATAN;
END;

这是错误

SQL Error: ORA-04098: trigger 'SCOTT.TRIGGER1' is invalid and failed re-validation
04098. 00000 -  "trigger '%s.%s' is invalid and failed re-validation"
*Cause:    A trigger was attempted to be retrieved for execution and was
           found to be invalid.  This also means that compilation/authorization
           failed for the trigger.
*Action:   Options are to resolve the compilation/authorization errors,
           disable the trigger, or drop the trigger.

【问题讨论】:

  • 错误消息在触发器“SCOTT.TRIGGER1”上。这不是您向我们展示的触发器。你能告诉我们失效的触发器吗?
  • 如果您以触发器所有者 SCOTT 的身份登录,那么您可以查询 user_errors 视图以查看触发器编译错误是什么。作为另一个用户,您可能可以在all_errorsdba_errors 中看到它。 (正如 Littlefoot 解释的那样,您显示的触发器将出现运行时变异表错误;但您已经显示了编译错误的结果,显然是在不同的触发器上......)

标签: oracle plsql triggers


【解决方案1】:

我想是变异表错误(如果你自己说的话会更容易)。您不能从刚刚更新的同一个表中进行选择。改用:new 伪记录:

CREATE OR REPLACE TRIGGER belitiket
   AFTER INSERT
   ON penumpang
   FOR EACH ROW
BEGIN
   INSERT INTO tiket (nik,
                      nama_penumpang,
                      nama_kereta,
                      rute,
                      harga)
      SELECT :new.nik,
             :new.nama,
             k.nama_kereta,
             :new.rute,
             k.harga
        FROM kereta_api k
       WHERE     :new.rute = k.rute
             AND :new.waktu = k.waktu_keberangkatan;
END;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 2019-06-01
    相关资源
    最近更新 更多