浏览 3078 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-09
例子 set @sql='xxx'; prepare stmt from @sql; execute stmt; deallocate prepare stmt; select @curd1; 1、在prepare stmt from 命令后面的变量不能是自定义变量,必须是用户变量或者全局变量 2、存储动态SQL的值的变量也不能是自定义变量,必须是用户变量或者全局变量 例子: set @sql='select cur,cur2 into @curd1,curd2 from mytable' prepare stmt from @sql; 3、存储过程非线程安全的,由于在动态SQL中使用用户变量,在多线程环境下,这个变量会被多个线程共享,因此必须加锁,方法如下: declare lockstatus int; if get_lock('锁名称',60) then ..... select release_lock('锁名称') into lockstatus; end if; get_lock中第一个参数是锁得名称,自定义的,当其他线程也请求这个锁时就会被锁定。 第二个参数是等待时间,即60秒内获取锁,否则失败。 release_lock只接受 锁名称 release_lock不能单独使用,如 release_lock('lock1'); 会编译不同步 必须在语句中使用,如select release_lock('lock1') into lockstatus; 比较怪异。 估计get_lock也是,但没试验。 4、JAVA程序调用方法(hibernate) String sqlname = "call 存储过程名称(?..参数列表)"; Query query = null; query = session.createSQLQuery(sqlname); query.setParameter(1,..); ... List list = query.list(); list.get(0); //这个就是存储过程中的select @curd1; 的查询结果 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |