mysql存储过程怎么建 mysql存储过程怎么创建

如何创建MySQL存储过程创建存储过程
mysql
delimiter
$
--
delimiter
$是设置
$为命令终止符号,代替默认的分号,因为分号有其他用处.
mysql
create
procedure
sp_test(IN
pi_id
int,
OUT
po_name
varchar(10))
-
begin
-
select
*
from
test.tb_test;
-
select
tb_test.name
into
po_name
from
test.tb_test
where
tb_test.id
=
pi_id;
-
end
-
$
Query
OK,
rows
affected
(0.00
sec)
mysql
delimiter
;
--
恢复分号作为分隔终止符号
5.调用存储过程
mysql
set
@po_name='';
Query
OK,
rows
affected
(0.00
sec)
mysql
call
sp_test(1,@po_name);
五、MYSQL存储过程和函数 ? create procedure用来创建存储过程,create function用来创建函数
?Delimiter命令是改变语句的结束符 , MySQL默认的结束符为;号,由于procedure和function中的;号并不代表创建的结束 , 所以要替换成另外的结束符以便表示创建的结束
? rontine_body子句可以包含一个简单的SQL语句,也可以包含多个SQL语句 , 通过begin…end将这多个SQL语句包含在一起
? MySQL存储过程和函数中也可以包含类似create和drop等DDL语句
? comment子句用来写入对存储过程和函数的注释
?Language子句用来表示此存储过程和函数的创建语言
?存储过程和函数被标注为deterministic表明当输入相同的参数是会返回相同的结果,反之如果是not deterministic则表示相同参数不会是相同结果,默认是not deterministic
?相关属性短语只有咨询含义,并不是强制性的约束
? Drop procedure/function语句用来删除指定名称的存储过程或函数
? Begin…end语句通常出现在存储过程、函数和触发器中,其中可以包含一个或多个语句 , 每个语句用;号隔开
? 标签label可以加在begin…end语句以及loop, repeat和while语句
?语句中通过iterate和leave来控制流程,iterate表示返回指定标签位置 , leave表示跳出标签
?Declare语句通常用来声明本地变量、游标、条件或者handler
?Declare语句只允许出现在begin … end语句中而且必须出现在第一行
?Declare的顺序也有要求 , 通常是先声明本地变量,再是游标,然后是条件和handler
? 本地变量可以通过declare语句进行声明
?声明后的变量可以通过select … into var_list进行赋值,或者通过set语句赋值,或者通过定义游标并使用fetch … into var_list赋值
? 通过declare声明变量方法:
? MySQL支持if,case,iterate,leave,loop,while,repeat语句作为存储过程和函数中的流程控制语句,另外return语句也是函数中的特定流程控制语句
? Case语句在存储过程或函数中表明了复杂的条件选择语句
? IF语句在存储过程或函数中表明了基础的条件选择语句
其中在 function 里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持 。如果我们开启了 bin-log, 我们就必须为我们的 function 指定一个参数 。
在 MySQL 中创建函数时出现这种错误的解决方法:
set global log_bin_trust_function_creators=TRUE;
? Iterate语句仅出现在loop,repeat,while循环语句中,其含义表示重新开始此循环
? Leave语句表明退出指定标签的流程控制语句块
? 通常会用在begin…end,以及loop,repeat,while的循环语句中
? Loop语句是存储过程或函数中表达循环执行的一种方式
? repeat语句是存储过程或函数中表达循环执行的一种方式

推荐阅读