存储过程是一组完成特定功能的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