示例:
CREATE PROCEDURE sp_customers(IN cusid INT)
BEGIN
SELECT * FROM customers WHERE `客户ID`=cusid;
END;
CALL sp_name([参数])
CALL sp_customers(1);
解释:
过程体即我们在调用时必须执行的SQL语句,上面的SELECT查询即为一个简单的过程体。
过程体包含DML、DDL语句,if-then-else和while-do语句、声明变量的declare语句等
过程体的格式上面也已经演示过,以BEGIN开始,以END结尾(可以嵌套)。
BEGIN
BEGIN
BEGIN
-- SQL代码;
END
END
END
[label_name:] BEGIN [statement_list] END [label_name]
label1: BEGIN
label2: BEGIN
label3: BEGIN
--SQL代码;
END label3 ;
END label2;
END label1
IN输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
OUT输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
CREATE PROCEDURE sp_customers_out(OUT cusname VARCHAR(20))
BEGIN
SELECT cusname;
SELECT `姓名` INTO cusname FROM customers WHERE `客户ID`=1;
SELECT cusname;
END
CALL sp_customers_out(@cusname);
CREATE PROCEDURE sp_customers_inout(INOUT cusname VARCHAR(20))
BEGIN
SELECT cusname;
SELECT `姓名` INTO cusname FROM customers WHERE `客户ID`=2;
SELECT cusname;
END
SET @cusname='张三';
CALL sp_customers_inout(@cusname);
需要输入值时使用IN参数;
需要返回值时使用OUT参数;
INOUT参数尽量少用。
—完—
推荐一下最近更新的《SQL145题》专栏,目前仅售10元,精选工作中145道常见面试题,对应想提升SQL查询能力的帮助明显。