mysql存储过程prepare_mysql存储过程中调用Prepare返回值

在MySQL存储过程中,作者尝试根据输入参数动态构建SQL并使用Prepare执行。问题在于如何在存储过程中获取并遍历Execute后的查询结果集。代码示例中展示了创建存储过程的尝试,但未找到直接在存储过程中处理结果集的方法。
摘要由CSDN通过智能技术生成

我想在MySQL中完成这样一个功能,根据传入的参数动态拼装成一个sql,然后使用Prepare来执行这个sql(这些已经完成),然后得到其查询结果,用游标遍历结果集,并根据结果集里的某个属...

我想在MySQL中完成这样一个功能,根据传入的参数动态拼装成一个sql,然后使用Prepare来执行这个sql(这些已经完成),然后得到其查询结果,用游标遍历结果集,并根据结果集里的某个属性的值进行一些操作。可我现在无法获得Execute后取得的返回结果。

下面是我的procedure,是可以执行的,关键是在哪里能够对返回的结果集进行获取,我不想再程序中获取,最好可以在存储过程中完成遍历结果集,大家看看能不能有什么好办法。

DELIMITER $$

DROP PROCEDURE IF EXISTS getspecial $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `getspecial`(

IN starttime VARCHAR(8),

IN startcity VARCHAR(3),

IN leavecity VARCHAR(3),

IN aircom VARCHAR(2)

)

BEGIN

DECLARE sqlStr VARCHAR(1000);

DECLARE city_Couple VARCHAR(7);

SET sqlStr = 'select sf.specialfileid,so.specialowcoursesid,PERFORMSTOPDATE,discount,isexflight,

flight,dayahead,saleticketdate,sprice from specialowcourses so,specialfile sf

where so.specialfileid = sf.specialfileid ';

IF starttime IS NOT NULL THEN

SET @dw = DATE_FORMAT(dateConvert(starttime),'%W');

SET sqlStr = CONCAT(sqlStr,' and sf.',@dw,' = 1');

SET sqlStr = CONCAT(sqlStr,' and ',starttime,' between sf.performstartdate and sf.performstopdate ');

SET sqlStr = CONCAT(sqlStr,' and exdate not like\'',starttime,'\'');

END IF;

IF startcity IS NOT NULL AND leavecity IS NOT NULL THEN

SET city_Couple = CONCAT(startcity,'-',leavecity);

SET sqlStr = CONCAT(sqlStr,' and (courses like \'%',city_Couple,'%\' or courses like \'%',UCASE(startcity),'-ALL%\' or courses like \'%ALL-',UCASE(leavecity),'%\' or courses like \'%ALL-ALL%\') ');

SET sqlStr = CONCAT(sqlStr,' and (excourses not like \'%',city_Couple,'%\' and excourses not like \'%',UCASE(startcity),'-ALL%\' and excourses not like \'%ALL-',UCASE(leavecity),'%\' and excourses not like \'%ALL-ALL%\') ');

END IF;

IF aircom IS NOT NULL THEN

SET sqlStr = CONCAT(sqlStr,' and sf.airwaycode = \'',aircom,'\' ');

END IF;

SET @sql = sqlStr;

PREPARE STMT FROM @sql;

EXECUTE STMT;

DEALLOCATE PREPARE STMT;

END$$

DELIMITER ;

就是上面这段代码,请大家帮想想办法,我估计是不是能在

PREPARE STMT FROM @sql;

EXECUTE STMT;

这里做些什么来获取返回结果呢?我知道Mysql的存储过程对动态查询的支持很有限,如果不能的话有哪位仁兄有什么好点的办法可以完成我的需求,谢谢了。

展开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值