存储过程是一组完成特定功能的sql语句集合,已经被编译好,可以直接拿来被执行,可以传参
参数有三种类型,in ,out ,inout 。
in类型的参数,可以在存储过程的方法体里面被调用,但是无法影响外部
out类型的参数,无法被内部调用,存储过程出来的结果可以影响外部
inout类型的参数,可以被接收调用,出来的结果可以影响外部
存储过程的意义
1.存储过程只编译一次,提高了数据库执行效率
2.当对数据库有复杂操作时,比如对多个表进行增删改查,这些操作如果用程序来完成,就是一条条的sql语句,需要多次连接数据库,而换成存储过程,只需一次
3.存储过程可以重复使用,节省开发时间
一个存储过程的例子
mysql> delimiter $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)
-> BEGIN
-> DELETE FROM MATCHES
-> WHERE playerno = p_playerno;
-> END$$
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter; #将语句的结束符号恢复为分号
有的时候,存储过程需要自定义参数
参数定义方式示例
DECLARE l_int int unsigned default 4000000;
DECLARE l_numeric number(8,2) DEFAULT 9.95;
DECLARE l_date date DEFAULT '1999-12-31';
DECLARE l_datetime datetime DEFAULT '1999-12-31 23:59:59';
DECLARE l_varchar varchar(255) DEFAULT 'This will not be padded';
参数赋值示例
set var = p1;
TP5 中使用存储过程用的是 Db::query(); 例如 result = Db::query('call sp_query(8)');
这里有个例子https://blog.csdn.net/qq_36607076/article/details/87919538
来源:51CTO
作者:cys7320692
链接:https://blog.51cto.com/8210504/2482848