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 触发编译错误的主要内容,如果未能解决你的问题,请参考以下文章