存储过程 一、基本语法 create procedure sp_name([proc_parameter[,...]]) [characteristic...]routine_body begin end sp_name 表示存储过程的名字 proc_parameter 存储过程参数例表[IN OUT INOUT]三个部分组成 其中IN 表示传进来的参数 其中OUT 表示传出去的参数 其中INOUT 表示传进来但最终传回的参数 routine_body 参数是SQL代码的内容(类似于触发器的for each row) begin..end标志SQL代码的开始和结束 二、关于IN OUT INPOUT的举例说明 IN 参数例子 delimiter && create procedure alvin1( in p_in int) #设置传入的参数类型和变量 begin select p_in; #查询第一次传入的参数值 set p_in=2; #内部重新赋值给p_in变量 select p_in; #赋值后在此查询 end && delimiter ; set @p_in=1; #开始传入参数1 call alvin1(@p_in); #调用存储过程,查看和对比输出的值 OUT 参数例子 delimiter && create procedure alvin2( out p_out int) begin select p_out; set p_out=2; select p_out; end && delimiter ; set @p_out=1; 传入的参数1之后 call alvin2(@p_out)调用了之后。是否和IN一样都显示出来了?还是无效? INOUT 参数例子 delimiter && create procedure alvin3( inout p_inout int) begin select p_inout; set p_inout=2; select p_inout; end && delimiter ; 三、举例说明 需求:创建一个存储过程,要求(返回mysql的版本,用户 所在的数据库、用户名称) delimiter && create procedure zy1( out getversion varchar(30), out userversion varchar(30), out userdatabase varchar(30), out userconnection int) reads sql data begin select version() into getversion; select user() into userversion; select database() into userdatabase; select connection_id() into userconnection; end && delimiter ; 需求二、统计vendors vend_id的数量总共有多少条? out zycount int select count(*) into zycount from vendors #==================================================== 存储函数 create function sp_name([func_parameter[,.....]]) return type [characteristic...]routine_body begin...end 其中sp_name 存储函数的名称 func_parameter 函数参数列表 return type 指定返回的参数类型 routine_body SQL代码内容 begin..end标志SQL代码的开始和结束 注意:与存储过程不同, 1、参数只有输入类型 2、向调用方返回结果值 举例: delimiter && create function alvin11( bb_id int) returns varchar(20) begin return(select vend_name from vendors where vend_id=bb_id); end && delimiter ; 练习需求:编写一个存储函数,要求出入cust_id的的时候返回order_date这个字段的值 表名为:orders #==================================================== 流程控制 (1)存储过程if语句的使用方法 delimiter && create procedure zyif( in aa int,out bb int) begin if aa>20 then set bb=30; elseif aa=20 then set bb=20; else set bb=15; end if; end && delimiter ; (2)存储过程case用法 delimiter && create procedure zy_case(in aa int,inout bb int) begin case when aa=20 then set bb=20; when aa>20 and aa<=50 then set bb=30; when aa>51 then set bb=60; else set bb=15; end case; end && delimiter ; (3)while 循环使用,插入1万数据 创建一个表 create table zybb (user_id int, name varchar(10)); Query OK, 0 rows affected (0.10 sec) delimiter && create procedure zy_while() begin declare count int default 0; while count < 100000 do insert into zybb(user_id,name)values(count,'aaa1'); set count=count + 1; end while; end && delimiter ; call zy_while() 调用存储过程 #=========================================================== (1)调用存储过程 call+存储过程名称+参数 如:call alvin_name(@p_inout) (2)查询结果 select @p_inout (3)查询存储过程 show procedure status\G; (4)查询某个存储过程详细 show create procedure alvin1\G; (5)查询存储函数 show function status\G; (6)查询某个详细的存储函数 show create function alvin10\G; (7)删除存储过程 drop procedure alvin1; (8)删除存储函数 drop function alvin1;
mysql存储过程、存储函数及流程控制
原创
©著作权归作者所有:来自51CTO博客作者江山此夜寒的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
MySQL的存储过程——流程控制-case
CASE是另一个条件判断的语句,类似于编程语言中的switch语法
mysql 流程控制 case 数据库 database -
MySQL的存储过程——流程控制-if判断
IF语句包含多个条件判断,根据结果为TRUE、FALSE执行语句,与编程语言中的if、else if、else语法类
流程控制 mysql 数据库 if else -
mysql存储过程控制语句
控制语句 不论什么编程语言都会设计到 我们先来介绍一下 oracle 的控制语句吧 if else elsif while for loop 而在mysql中的控制语句是:
mysql 数据库 存储 休闲 procedure -
MySQL的存储过程——流程控制-while、repeat、loop循环
循环是一段在程序中只出现一次,但可能会连续运行多次的代码。循环中的代码会运行特定的次数,或者是运行到特定条件成
loop循环 while 循环 repeat 循环 MySQL 循环 存储过程 -
11@mysql高手系列(视图、触发器、存储过程、函数、流程控制)
mysql的特殊用法(视图、触发器、存储过程、函数、流程控制)一、视图关系型数据库中
mysql sql while 数据库 存储过程