【问题标题】:sqlplus trigger compilation errorsqlplus 触发编译错误
【发布时间】: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 视图,以查看实际的编译错误。

标签: sql triggers sqlplus


【解决方案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;
/

【讨论】:

    猜你喜欢
    • 2017-09-07
    • 1970-01-01
    • 2014-11-29
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多