sqlplus 触发编译错误

Posted

技术标签:

【中文标题】sqlplus 触发编译错误【英文标题】:sqlplus trigger compilation error 【发布时间】:2017-02-11 09:02:04 【问题描述】:

这是语法错误吗,我的代码中是否缺少空格或“:”。下面是我创建触发器的代码

  SQL> Create or replace  trigger trig_addr_mulund
      2  After insert or update
      3  On users_table
      4  For each row
      5  begin
      6  If :new.address like 'Mulund' then
      7  Insert into D12B_A23.user_mulund@ralink values (:new.id,:new.role_id,:new.b
    ranch_id,:new.name,:new.email,:new.phone,:new.address,
      8  :new.email,:new.phone,:new.address);
      9  Else
     10  Insert into D12B_A14.user_not_mulund@rslink values (:new.id,:new.role_id,:n
    ew.branch_id,:new.name,:new.email,:new.phone,:new.address,
     11  :new.email,:new.phone,:new.address);
     12  End if
     13  End;
     14  /

Warning: Trigger created with compilation errors.

【问题讨论】:

看到该警告后使用show errors,或查询user_errors 视图,以查看实际的编译错误。 【参考方案1】:

您在END IF 附近的第 12 行中缺少一个分号

由于您正在进行直接比较,请使用= 而不是LIKE。 此外,建议在 SQL 语句中明确提供列名。

CREATE OR REPLACE TRIGGER trig_addr_mulund AFTER
  INSERT OR
  UPDATE ON users_table FOR EACH row
BEGIN 
  IF :new.address = 'Mulund' THEN    -- changed "LIKE" to "="
  INSERT
  INTO D12B_A23.user_mulund@ralink VALUES
    (
      :new.id,
      :new.role_id,
      :new.branch_id,
      :new.name,
      :new.email,
      :new.phone,
      :new.address,
      :new.email,
      :new.phone,
      :new.address
    );
ELSE
  INSERT
  INTO D12B_A14.user_not_mulund@rslink VALUES
    (
      :new.id,
      :new.role_id,
      :new.branch_id,
      :new.name,
      :new.email,
      :new.phone,
      :new.address,
      :new.email,
      :new.phone,
      :new.address
    );
END IF; -- added the missing semicolon
END;
/

【讨论】:

以上是关于sqlplus 触发编译错误的主要内容,如果未能解决你的问题,请参考以下文章

ORA-24344: 编译错误成功 - 触发 APEX

继承方法调用触发 Typescript 编译器错误

继承方法调用触发 Typescript 编译器错误

使用编译错误创建的触发器:

警告:使用编译错误创建触发器?

在 Oracle PL/SQL 中创建触发器时如何解决“编译错误成功”错误?