mysql存储过程的坑(关于declare与具体实现顺序)
2017-09-29 13:24
288 查看
先上代码
错误原因:
存储过程的所有关于数据库增删改查的操作必须在所有 declarre声明完所有 变量 ,包括游标等 之后再执行,
否则该存储过程将无法运行
正确方法将SELECT id into tbtypeId from dbbanquet.tbtype where fname = '早餐';
该句放到 declare continue handler for not found set done=atrue;之后
BEGIN DECLARE hotelId BIGINT DEFAULT 0; DECLARE done int DEFAULT FALSE; DECLARE tbtypeId BIGINT DEFAULT 0; SELECT id into tbtypeId from dbbanquet.tbtype where fname = '早餐'; /* 声明游标 */ declare myCursor cursor for SELECT hotel_id from kzsteb.hotel where hotel_id not in (SELECT distinct fhid from dbbanquet.tbtype); /* 当游标到达尾部时,mysql自动设置done=1 */ declare continue handler for not found set done=true;open myCursor; read_loop:LOOPfetch myCursor into hotelId; if done = true then leave read_loop; end if; insert into dbbanquet.tbbanquet(fname,funit,funitprice,ftype,findex,fmanagement,fhid,fcu,fcid,fctime,fmu,fmid,fmtime) VALUES('包价早餐','*',0,tbtypeId,1,0,hotelId,'',1,NOW(),'',0,NOW()); end loop; close myCursor; END
错误原因:
存储过程的所有关于数据库增删改查的操作必须在所有 declarre声明完所有 变量 ,包括游标等 之后再执行,
否则该存储过程将无法运行
正确方法将SELECT id into tbtypeId from dbbanquet.tbtype where fname = '早餐';
该句放到 declare continue handler for not found set done=atrue;之后
相关文章推荐
- 关于mysql下的存储过程的问题
- SD--关于定价过程中的存储顺序的参考结构和参考字段的使用代码跟踪
- Mysql存储过程的declare声明变量必须放在最前面
- 使用游标实现 mysql 存储过程中的循环
- 关于mysql存储过程~
- PHP调用MySQL的存储过程的实现代码
- MySQL 存储过程传参数问题:实现 where id in(1,2,3,...)
- Java实现mysql存储过程调用
- 关于ADO连接MYSQL调用存储过程的ERROR1064错误
- 关于mysql存储过程的definer的问题1
- mysql 存储过程中的declare 和 set @的两种变量的区别
- 疑问:关于组合查询时候的方法实现?能在存储过程中综合一下吗?
- 关于对MYSQL存储过程传递参数是纯数字还是字符串的判断
- MySql 运用存储过程实现主键生成
- 关于对MYSQL存储过程传递参数是纯数字还是字符串的判断
- MySQL中关于行转列的存储过程的写法(使用游标)
- 第一次写MySQL存储过程遇到的关于DELIMITER的问题
- MySQL存储过程和触发器的实现--数据库学习笔记
- MySQL 存储过程传参数问题:实现 where id in(1,2,3,...)
- 《.NET中统一的存储过程调用方法(收藏) 》的具体实现