2013-08-22 72 views
4

创建触发器我有这两个表:用case语句

USERS(username, role_id) 
COMMISSION_RATES(username, commission_rate) 

users.username是主键,commission_rates.username是一个外键。

我想写一个触发器,在用户插入后,检查role_id = 2,然后插入commission_ratesusers.username,0为佣金率。

这是我迄今为止,它不工作虽然:

create or replace TRIGGER SETCOMISSIONRATE 
AFTER INSERT ON USERS 
BEGIN 
    CASE 
    WHEN users.role_id = 2 THEN 
     INSERT INTO COMISSION_RATE 
      (username, 
      comission_rate) 
     VALUES (
      :NEW.username, 
     0) 
END; 

任何帮助,将不胜感激

+0

认为你需要一个分号insert语句后 –

回答

1

WHEN条件必须在定义部分,而不是身体。它们只能用于行触发。

create or replace 
TRIGGER SETCOMISSIONRATE 
AFTER INSERT ON USERS 
FOR EACH ROW 
WHEN (NEW.role_id = 2) 
BEGIN 
    INSERT INTO COMISSION_RATE 
    (username, 
    comission_rate) 
    VALUES (
    :NEW.username, 
    0) 

END; 
2

应该是这样的:

CREATE OR REPLACE TRIGGER SETCOMISSIONRATE 
AFTER INSERT ON USERS FOR EACH ROW 
WHEN (new.role_id = 2) 
BEGIN 
    INSERT INTO COMISSION_RATE (username, comission_rate) 
    VALUES (:new.username, 0); 
END; 
+0

谢谢你,当我输入到这个SQL它强调 INSERT INTO COMISSION_RATE(broker_username,comission_rate)在红色,并且不起作用 – user2706577

+0

我也遇到这些错误: 错误(2,5):PL/SQL:SQL语句被忽略 错误(3,31):PL/SQL:ORA-00933:SQL命令未正确结束 错误(4,4):PLS-00103:遇到符号“end-of-file”时ex执行以下操作之一:(开始case为goto声明结束异常退出如果循环mod空pragma用<标识符>引发返回select更新<< continue close current delete读取锁定插入打开回滚保存点集合sql执行提交forall合并管道清除 – user2706577

+0

我在一段时间内没有在oracle中编程,但在插入值之后添加';'应该可以做到这一点。 – Meldor