带游标的Mysql存储过程
Mysql光标问题 我已经编写了一个存储过程,它将travel的记录从一个表中插入到2-3个不同的表中 使用insert语句 问题是,我正在检查表1中是否不存在记录,然后按顺序将记录从TENTRABLE插入到表1、表2中 ,但情况有点问题,我不知道它总是进入其他部分 代码示例如下:带游标的Mysql存储过程,mysql,stored-procedures,cursor,Mysql,Stored Procedures,Cursor,Mysql光标问题 我已经编写了一个存储过程,它将travel的记录从一个表中插入到2-3个不同的表中 使用insert语句 问题是,我正在检查表1中是否不存在记录,然后按顺序将记录从TENTRABLE插入到表1、表2中 ,但情况有点问题,我不知道它总是进入其他部分 代码示例如下: CREATE PROCEDURE `insertData`(In clientNo INT,In usedID INT) BEGIN declare mame varchar(100); declare addre
CREATE PROCEDURE `insertData`(In clientNo INT,In usedID INT)
BEGIN
declare mame varchar(100);
declare address varchar(100);
declare city varchar(50);
declare IdentityNO1 varchar(20)
declare cur1 cursor for select * from temptable;
declare continue handler for not found set done=1;
SET @clientNo = clientNO;
SET @userID = userID;
set done = 0;
open cur1;
igmLoop: loop
fetch cur1 into Name,Address,City,IdentityNO1,clientNo;
if done = 1 then leave igmLoop; end if;
//If no record exists in some records table1,table2.
IF ( (SELECT COUNT(*) FROM table1
WHERE IndentityNo=IdentityNo1
AND clientNo=@clientNo) < = 0)
INSERT INTO table1 (Name,IdentityNO) VALUES (name,IdentityNO1);
INSERT INTO table2 (Address,City) VALUES(address,city);
ELSE
INSERT INTO tblexceptional(Name,Address,City,IdentityNo)
VALUES(name,address,city,IdentityNo1);
end loop igmLoop;
close cur1;
END
如果没有THEN或END关键字,则程序无法编译。
检查此链接以了解IF语句的正确语法:
使用EXIST运算符而不是SELECT count*。。。Thanx为您的答案,我将尝试它。但相同的参数名称会导致任何问题吗?因为若我从表中给出相同的参数名和列,我将很好地编译这个过程。@krokodilko,我相信你们的答案需要一个不存在的。。。在条件插入子句中。
IF EXISTS(
SELECT null FROM table1
WHERE IndentityNo=IdentityNo1
AND clientNo=@clientNo
)
THEN
INSERT INTO table1 (Name,IdentityNO) VALUES (name,IdentityNO1);
INSERT INTO table2 (Address,City) VALUES(address,city);
ELSE
INSERT INTO tblexceptional(Name,Address,City,IdentityNo)
VALUES(name,address,city,IdentityNo1);
END IF;
declare cur1 cursor for
select name,Address,City,IdentityNO,clientNo
from temptable;
CREATE PROCEDURE `insertData`(In p_clientNo INT,In p_usedID INT)
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 no record exists in some records table1,table2.
IF EXISTS( SELECT 1 FROM table1
WHERE IndentityNo = v_IdentityNo
AND clientNo = v_clientNo)
INSERT INTO table1 (Name,IdentityNO) VALUES (v_name,v_IdentityNO);
INSERT INTO table2 (Address,City) VALUES(v_address,v_city);
ELSE
INSERT INTO tblexceptional(Name,Address,City,IdentityNo)
VALUES(v_name,v_address,v_city,v_IdentityNo);
END IF;
end loop igmLoop;
close cur1;
END