如何在游标循环中跳过一行?
我提到 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
答案 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
语句,这样如果某些条件为真,它只会执行所有游标迭代的一部分