------------------------------------存储过程----------------------------------------------
1. 创建
(1)格式:
CREATE PROCEDURE 过程名 (args, ...)
[特性 ...] 过程体
(2)例子:
mysql> DELIMITER
//
mysql> CREATE PROCEDURE proc1(OUT s int)
-> BEGIN
-> SELECT COUNT(*) INTO s FROM user;
-> END
-> //
mysql> DELIMITER
;
(3)分隔符:
注意上面例子中的“DELIMITER //”和“DELIMITER ;”这两句。
DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果没有声明分割符,那么编译器会把存
储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先DELIMITER关键字申当前段分
隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。
如果是用MySQL的Administrator管理工具时,可以直接创建,不再需要声明。
(4)参数
存储过程的参数共有三种参数类型,IN,OUT,INOUT,形式如:
CREATE PROCEDURE(IN|OUT|INOUT args datatype, ...)
IN 输入参数:表示该参数的值必须在调用存储过程时指定(只传递值)
mysql > DELIMITER
//
mysql > CREATE PROCEDURE in_para(IN pin
int)
->
BEGIN
-> SELECT
pin;
-> SET
pin=2;
-> SELECT
pin;
->
END;
-> //
mysql > DELIMITER ;
mysql > SET @mysql=1;
mysql > CALL
in_para(@mysql);
mysql> SELECT
@mysql;
OUT
输出参数:该值可在存储过程内部被改变,并可返回(传递地址,并将所指向的变量值设为NULL)
mysql > DELIMITER
//
mysql > CREATE PROCEDURE demo_out_para(OUT pout
int)
-> BEGIN
-> SELECT pout;
-> SET
pout=2;
--可以将这句省略,看到变量值确实被设为NULL
-> SELECT pout;
-> END;
-> //
mysql > DELIMITER ;
mysql > SET @mysql=1;
mysql >
CALL out_para(@mysql);
mysql> SELECT
@mysql;
INOUT 输入输出参数:调用时指定,并且可被改变和返回(只传递地址)
mysql > DELIMITER
//
mysql > CREATE PROCEDURE inout_para(INOUT pinout
int)
-> BEGIN
-> SELECT pinout;
-> SET pinout=2;
-> SELECT
pinout;
-> END;
->
//
mysql > DELIMITER ;
mysql > SET @mysql=1;
mysql > CALL
inout_para(@mysql);
mysql > SELECT
@mysql;
(5)变量
a. 定义变量:DECLARE var_name datatype [DEFAULT value];
datatype为MySQL的数据类型,如:int, float, date, varchar(length)。
例如:
DECLARE a int unsigned default 4000000;
DECLARE b number(8,2) DEFAULT 9.95;
DECLARE c date DEFAULT '1999-12-31';
DECLARE d datetime DEFAULT '1999-12-31
23:59:59';
DECLARE e varchar(255) DEFAULT 'This will not be padded';
b. 变量赋值:SET var_name = expression;
c. 用户变量
在MySQL客户端使用用户变量
mysql > SELECT 'Hello World' into @x;
mysql > SELECT @x;
mysql > SET @y='Do you know?';
mysql > SELECT @y;
mysql > SET @z=1+2+3;
mysql > SELECT @z;
在存储过程中使用用户变量
mysql > CREATE PROCEDURE GreetWorld() SELECT CONCAT(@greeting,'
World');
mysql > SET @greeting='Hello';