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

来源:互联网 发布:linux系统vi命令详解 编辑:程序博客网 时间:2024/06/16 17:01
定义具有参数的存储过程,从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
原创粉丝点击