【问题标题】:TRIGGER tU_DEDPARM_OEFix compiled Warning: execution completed with warningTRIGGER tU_DEDPARM_OEFix 已编译警告:执行完成但有警告
【发布时间】:2017-04-16 04:14:01
【问题描述】:

我正在下面运行在 Oracle 中创建触发器查询:-

SQL>CREATE OR REPLACE TRIGGER tU_DEDPARM_OEFix 
  AFTER INSERT OR UPDATE ON DED_PARM FOR EACH ROW 
BEGIN    
  UPDATE DED_PARM SET  
     DED_PARM.OVRD_DED_AM = COALESCE(i.OVRD_DED_AM,0.00), 
     DED_PARM.OVRD_DED_PC = COALESCE(i.OVRD_DED_PC,0.00000)    
       FROM   DED_PARM AS d INNER JOIN inserted AS i  
         ON (i.INTERNAL_EMPL_ID=d.INTERNAL_EMPL_ID AND 
            i.APPOINTMENT_ID=d.APPOINTMENT_ID AND 
            i.DEDTYP_CD=d.DEDTYP_CD AND  
            i.EFFECTIVE_DT=d.EFFECTIVE_DT) 
  END; /

执行查询后,我遇到以下错误:-

TRIGGER tU_DEDPARM_OEFix 已编译警告:执行完成 警告。

然后我运行下面的查询来查看编译错误

SQL>显示 TRIGGER TU_DEDPARM_OEFIX 的错误错误;

以下是错误:-

5/3 PL/SQL:ORA-00933:SQL 命令未正确结束 2/3
PL/SQL:SQL 语句被忽略 10/4 PLS-00103:遇到 预期以下之一时的符号“文件结尾”:

( 开始 case 声明结束异常退出 goto if loop mod
null pragma raise return select update while with

谁能帮我准备正确的查询。仅供参考 - 触发器已创建,但创建时存在我上面显示的编译错误。

谢谢!!

【问题讨论】:

    标签: oracle triggers


    【解决方案1】:

    这不是 Oracle 中更新的有效语法。我不确定 inserted 在 MSSQL 中做了什么(:new:old),但我认为这是该触发器的 Oracle 语句

    CREATE OR REPLACE TRIGGER tU_DEDPARM_OEFix 
      AFTER INSERT OR UPDATE ON DED_PARM FOR EACH ROW 
    BEGIN  
    update DED_PARM d SET 
      OVRD_DED_AM = COALESCE(:new.OVRD_DED_AM,0), 
      OVRD_DED_PC = COALESCE(:new.OVRD_DED_PC,0)
    where INTERNAL_EMPL_ID = :new.INTERNAL_EMPL_ID and
          APPOINTMENT_ID = :new.APPOINTMENT_ID and
          DEDTYP_CD = :new.DEDTYP_CD and
          EFFECTIVE_DT = :new.EFFECTIVE_DT;
    END;
    

    【讨论】:

    • 感谢您的回答。但是如果我在 DED_PARM.OVRD_DED_PC = COALESCE(:new.OVRD_DED_PC,0); 后面加上分号 (;) (在 FORM 之前)我面临以下错误:- 5/3 PLS-00103:在预期以下情况之一时遇到符号“FROM”:(开始案例声明结束异常退出 goto if loop mod null pragma raise return select update while with
    • 我猜,我不应该在 FORM 之前放分号,否则在放你的代码后我仍然面临同样的错误。@ Kacper
    • 那里根本不需要。 docs.oracle.com/cd/B19306_01/server.102/b14200/…@AshutoshBajpai
    • @AshutoshBajpai 立即尝试。我已经编辑了我的答案以包含完整的触发器语句。您还可以查看有关触发器的文档:docs.oracle.com/cd/B19306_01/server.102/b14200/…
    • 嘿,谢谢。现在对我来说工作正常。实际上我已经在 Oracle 中转换了 sql 查询,这就是发生这种误解的原因..
    猜你喜欢
    • 1970-01-01
    • 2018-11-03
    • 2011-02-12
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 2023-03-17
    相关资源
    最近更新 更多