注:未经本文作者同意,严禁转载,本文仅提供作者查阅使用
创建存储过程的基本格式
-- 格式
DELIMITER $$
CREATE PROCEDURE <proc_name>([IN/OUT arge])
BEGIN
-- SQL
END $$
例子1:
-- 存储过程:就是将能够完成特定功能的SQL指令进行封装
-- 创建一个存储过程实现加法运算:存储过程,是有输入参数 和 输出参数的
-- 什么是输入和输出参数,输入参数类似于Java中的入参和入参的类型;输出参数类似于Java中的返回值
DELIMITER $$
CREATE PROCEDURE procedure_test1(IN a INT,IN b INT,OUT c INT)
BEGIN
SET c = a+b;
END $$
调用存储过程
-- 调用存储过程
-- CALL 存储过程名称(3,2,变量)
-- 定义变量@m
SET @m = 0;
-- 调用存储过程,将3传递给a,将2传递给b,将@m传递给c
CALL procedure_test1(3,2,@m)
显示变量值
-- 显示变量值,dual这张表是系统自带的
SELECT @m FROM dual
例子2:
细节注意:return 返回在自定义函数中返回,存储过程中返回需要用到 select 关键字,否则调用存储过程时会是空。还有就是这里的
x 和 y 不要加上 `` 不然调用存储过程时,查的时候还是 null 值
-- 创建一个存储过程:计算 输入参数的平方与输入参数/2 之和
DELIMITER $$
CREATE PROCEDURE procedure_test2(IN a INT,OUT r INT)
BEGIN
-- 此处的变量是存储过程使用的局部变量,定义关键字 declare
-- declare <attr_name> <type> [default value];
-- declare 变量名称 变量类型 默认值设置;
DECLARE x INT DEFAULT 0;
DECLARE y INT DEFAULT 0;
DECLARE r INT DEFAULT 0;
SET x = a*a;
SET y = a/2;
SET r = x+y;
SELECT r;
END $$
-- 定义一个用户变量,细节注意:变量要以@开头,定义的关键字是set关键字
-- 什么是用户变量:用户变量相当于全局变量,可以在多个 SQL 存储过程中共享
-- 在开发中尽量少使用用户变量。原因:用户变量过多,会容易导致程序不容易理解,维护时比较困难
SET @n=1
CALL procedure_test2(6,@n)
SELECT @n FROM DUAL
-- 删除存储过程
DROP PROCEDURE procedure_test2
加了 select 返回的
例子3:
-- 查询存储过程:查询员工的数量并返回
DELIMITER $$
CREATE PROCEDURE procedure_test3(OUT e INT)
BEGIN
-- into e意思:将查询出的结果值赋值给 e 并且返回出去
SELECT COUNT(id) INTO e FROM employees;
END $$
SET @i=0
CALL procedure_test3(@i)
SELECT @i FROM DUAL
SELECT COUNT(id) FROM employees
DROP PROCEDURE procedure_test3
细节注意:但是你不能写成以下这样,这样写是会报错的
DELIMITER $$
CREATE PROCEDURE procedure_test4(OUT e INT)
BEGIN
SET e = SELECT COUNT(id) FROM employees;
SELECT e;
END $$