.net 中ibatis调用mysql存储过程
Mysql存储过程:
create procedure GetTicketData ( ProjectCode VARCHAR(50) )
begin SET @sql_1="";
SET @sql_1 = concat("CREATE TEMPORARY TABLE tmp_table SELECT a.StoreComplainID,a.id as StoreLevelComplainID,sc.DateRound,a.CategoryName,sc.Store_Code,sc.Store_Name,a.Fact_Code,a.Fact_Name,a.Item_Name,a.Content, a.HandleResult, (case sc.Escalated when 1 then '释放' else '未释放' end Escalate, sc.T1Escalate_Remark,sc.T2Escalate_Remark,DATE_FORMAT(sc.ComplainTime,'%Y-%m-%d') as ComplainTime
from t_storelevelcomplain a
LEFT JOIN t_storecomplain sc on a.StoreComplainID=sc.ID
where sc.Project_Code = ",'"',ProjectCode,'"');
PREPARE stmt FROM @sql_1;
EXECUTE stmt;
SELECT * from tmp_table;
drop TABLE tmp_table;
end
在mysql里面可以正常执行,但放到程序里就会报错。
xml中的代码:
<statements>
<!--执行存储过程,导出Ticket数据-->
<procedure id="ExportTicketData" resultClass="hashtable" >
{call GetTicketData($ProjectCode$)}
</procedure>
</statements>
执行mysql时,传入的参数是:'P01',程序中传入的参数也是'P01',可程序中就是会报错,请问,有没有遇到过这个问题的园友?帮忙解答一下,谢谢!
在存储过程里面自己添加一些select 1,select 2这些标志,然后手动call存储过程,观察存储过程执行到哪里出错没有继续执行,慢慢的一句一句调试,看你这存储过程语句也不多,应该很容易找到出问题的语句的
在mysql里是没错的,到程序里就会出错了
@大丽丽Yeah!: 你直接手动call存储过程没有问题吗
@风归云隐: 我刚才又查了一遍,没有的
@大丽丽Yeah!: 那应该就是程序传进来的参数有问题,你调试一下,看看程序里面最后传到存储过程里面的参数有没有问题
@风归云隐: 程序中传过去的参数也是一样的啊
已经解决了,
xml中的代码改成这样,我也不知道为啥,这样写就没问题了:
<statements>
<!--执行存储过程,导出Ticket数据-->
<select id="ExportTicketData" resultClass="hashtable" >
call GetTicketData($ProjectCode$)
</select>
</statements>
之前没仔细看,你存储过程执行完返回的是select的查询结果,这种情况在ibatis里面要用select标签接收
@风归云隐: 噢噢,谢谢