sql 7 之 创建存储过程及其调用

定义具有参数的存储过程,从student表中根据学号查询某一学生的姓名和年龄,执行该存储过程。
定义过程如下:
delimiter //
create procedure insrectors(in num varchar(16),out name varchar(16),out age smallint)
begin
select sname,sage into name,age from student where ssno=num;
end;//
显示过程:
show create procedure insrectors;
这个分隔符也是个麻烦的问题:
这里需要注意的是DELIMITER //和DELIMITER ;两句,DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,
那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL
才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。
更多细节,参考
http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html
在准备调用自己创建的存储过程时,也遇到问题:
原来不过参数类型为in,out,inout,都需要传参:    http://www.2cto.com/database/201410/346921.html
而传参过程中,也不知道out参数如何传参,会报这样的错误:
ERROR 1414 (42000): OUT or INOUT argument 2 for routine jxgl.insrectors is not a variable or NEW pseudo-variable in BEFORE trigger
原来是因为:  存储过程最后一个参数是输出参数。因此必须使用一个变量。
在MySQL Workbench中测试存储过程的时候变量不用定义直接使用即可。
于是我这样使用:
call insrectors(2005001,@name,@age);
select @name, @age;
即可得到正确结果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值