如何在mysql触发器中按条件跳过行?

时间:2017-07-16 11:33:23

标签: mysql triggers

如何在游标循环中跳过一行?

我提到 CONTINUE ;在上面的片段中。如果名字=' siva'我想跳过。

CREATE TRIGGER `vdata_after_insert` AFTER INSERT ON `vdata`
BEGIN

declare v_name varchar(100);
declare v_address varchar(100);
declare v_city varchar(50);
declare v_IdentityNO varchar(20)
declare v_clientNo int


declare cur1 cursor for 
        select name,Address,City,IdentityNO,clientNo
        from temptable;
declare continue handler for not found set done=1;

    set done = 0;
    open cur1;
    igmLoop: loop
        fetch cur1 into v_name,v_Address,v_City,v_IdentityNO,v_clientNo;
        if done = 1 then leave igmLoop; end if;
        if v_name = 'siva' then **CONTINUE**;
        insert into audit(name, data) values(v_name, now())
    end loop igmLoop;
    close cur1;
END

2 个答案:

答案 0 :(得分:1)

也许为时已晚,但仍在为别人做答。 有一个称为Iterate的语句,可用于跳过其余代码。 这是一个例子。

b = Button(win, command=lambda: gui.color(win))

答案 1 :(得分:0)

根据MySQL documentation的说法,使用游标时无法跳过行:

  

MySQL支持存储程序中的游标。语法与嵌入式SQL中的一样。游标具有以下属性:

     

敏感:服务器可能会也可能不会复制其结果表
  只读:不可更新
  不可滚动:只能在一个方向上遍历,不能跳过行

但是,如果仔细观察触发器,您会看到还有另一种方法可以继续。我认为如果INSERT v_name,您可以将您的逻辑改为仅执行'siva'

if v_name <> 'siva' then
    insert into audit(name, data) values(v_name, now())
end if;
-- if the name is 'siva' then just flow to the next row fetched from the cursor

即使您的实际代码比这大得多,您也可以始终表示IF语句,这样如果某些条件为真,它只会执行所有游标迭代的一部分