有A(OUT S INT)和B(out y int)两个存储过程
A存储过程调用B存储过程,并且将Y赋值跟S,在a存储过程中有select s查出 y的值,为什么返回为空
求解决,谢谢!!!!!!
在调用时先用个临时变量接收Out参数看看, CALL pro_zw_getsystableid('tbl_zw_ArrivalSecurity', @id2);
请将调用和赋值代码贴上来
DELIMITER $$
DROP PROCEDURE IF EXISTS pro_zw_arrivalSecurity_add
$$
CREATE PROCEDURE carstation_mysql
.pro_zw_arrivalSecurity_add
(
OUT RETURN_VALUE INT,
busArchId VARCHAR(20),
busNumber VARCHAR(10),
unitName VARCHAR(100),
imagename VARCHAR(30),
busType VARCHAR(10),
Mainman VARCHAR(20),
secondman VARCHAR(20),
createdMan VARCHAR(20),
SecurityResult BIT,
memo VARCHAR(500),
menuidstr VARCHAR(500),
menuname VARCHAR(500),
driverid VARCHAR(20),
drivername VARCHAR(20),
OUT id INT,
timestr VARCHAR(8))
BEGIN
DECLARE fid VARCHAR(10);
DECLARE fname VARCHAR(50);
DECLARE dt VARCHAR(19);
DECLARE i INT;
DECLARE EXIT HANDLER FOR SQLEXCEPTION,
SQLWARNING,
NOT FOUND
BEGIN
ROLLBACK;
SELECT 0 AS RETURN_VALUE,id AS id;
END;
SET RETURN_VALUE=90;
SET timestr=0;
START TRANSACTION;
IF timestr='' THEN
SET timestr=CONVERT(CURDATE(),CHAR);
SET dt=CONVERT(CURDATE(),CHAR)+' '+timestr;
END IF;
IF EXISTS(SELECT * FROM tbl_zw_ArrivalSecurity WHERE busNumber=busNumber AND DATEDIFF(createdDate,CURDATE())<10) THEN
CALL sys_abnormal(0,0,0,RETURN_VALUE );
END IF;
CALL pro_zw_getsystableid('tbl_zw_ArrivalSecurity',id); -- 获取表id
INSERT INTO tbl_zw_ArrivalSecurity(createdDate,id,busArchId,busNumber,busType,unitName,imagename,Mainman,secondman,createdMan,SecurityResult,memo,driverid,drivername)
VALUES(dt,id,busArchId,busNumber,busType,unitName,imagename,Mainman,secondman,createdMan,SecurityResult,memo,driverid,drivername);
CALL sys_abnormal(ROW_COUNT(),1,0,RETURN_VALUE );
UPDATE tbl_zw_BusArchives SET
ajopertor='主检:'+Mainman+',副检:'+secondman,
ajbs=SecurityResult,
ajdt=CURDATE(),
bsnum=0,
ajid=id
WHERE busArchId=busArchId; -- 更新状态为已安检
WHILE (INSTR(menuidstr,'|')>0)AND(LENGTH(menuidstr)>1) DO
SET menuidstr=RIGHT(menuidstr,LENGTH(menuidstr)-1);
SET i=INSTR('|',menuidstr);
SET fid=LEFT(menuidstr,i-1);
SET menuidstr=RIGHT(menuidstr,LENGTH(menuidstr)-i+1);
IF LENGTH(menuname)>2 THEN
SET menuname=RIGHT(menuname,LENGTH(menuname)-1);
END IF;
IF LENGTH(menuname)>2 THEN
SET i=INSTR('|',menuname);
END IF;
IF LENGTH(menuname)>2 THEN
SET fname=LEFT(menuname,i-1);
END IF;
IF LENGTH(menuname)>2 THEN
SET menuname=RIGHT(menuname,LENGTH(menuname)-i+1);
END IF;
INSERT INTO tbl_zw_ArrivalSecurity_mx(id ,menuid,memo)
VALUES(id,fid,fname);
CALL sys_abnormal(ROW_COUNT(),1,0,RETURN_VALUE );
END WHILE;
CALL sys_abnormal(ROW_COUNT(),1,0,RETURN_VALUE );
COMMIT;
SELECT 1 AS RETURN_VALUE,id AS id;
END$$
DELIMITER ;
DELIMITER $$
DROP PROCEDURE IF EXISTS pro_zw_getsystableid
$$
CREATE PROCEDURE carstation_mysql
.pro_zw_getsystableid
(
tablename VARCHAR(50),
OUT id INT
)
BEGIN
SELECT tableid AS id FROM tbl_zw_sysTableId WHERE tablename=tablename;
UPDATE tbl_zw_sysTableId SET tableid=tableid+1
WHERE tablename=tablename AND tableid=id;
IF ROW_COUNT()=0 THEN
SET id=0; -- 当未更新成功时,说明此值已被其它用户数据占用,将返回0值,重新获取
END IF;
END$$
DELIMITER ;
CALL sys_abnormal(ROW_COUNT(),1,0,RETURN_VALUE );这个掉用不管,使用来报异常的
CALL pro_zw_getsystableid('tbl_zw_ArrivalSecurity',id); 这句话调用的下面的B存储过程
好像这个是能够正常调用的,但是我里面有一个是存储过程是用来抛异常的,里面也有这样的out参数,但是当抛异常时就不能返回成功,这样没有什么比较好的处理办法
CALL sys_abnormal(ROW_COUNT(),1,0,RETURN_VALUE );这个掉用不管,使用来报异常的
存储过程里面调用存储过程最终得到的都是查询结果,如果你要通过另一个存储过程做异常判断,
就只能在外存储过程中定义临时参数接收调用的存储过程执行结果,来判断做出外存储过程的相应操作,
CALL pro_zw_getsystableid('tbl_zw_ArrivalSecurity',id) 调用报错你就要查看这个B存储过程返回的结果是不是你
A接收定义的类型参数个数是否相同,或则本身B存储过程语法执行就有错误,不妨当读把B存储过程拿出来执行下