首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

mysql之存储过程跟存储函数

2013-01-26 
mysql之存储过程和存储函数CREATE PROCEDURE sp_name ([proc_parameter[,...]])[characteristic ...] rout

mysql之存储过程和存储函数
CREATE PROCEDURE sp_name ([proc_parameter[,...]])[characteristic ...] routine_bodyCREATE FUNCTION sp_name ([func_parameter[,...]])RETURNS type [characteristic ...] routine_body

proc_parameter:    [ IN | OUT | INOUT ] param_name typetype:    Any valid MySQL data typecharacteristic:    LANGUAGE SQL| [NOT] DETERMINISTIC| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }| SQL SECURITY { DEFINER | INVOKER }| COMMENT 'string'
routine_body:    Valid SQL procedure statement or statements
        COMMENT子句是一个MySQL的扩展,它可以被用来描述存储程序。这个信息被SHOW CREATE PROCEDURE和 SHOW CREATE FUNCTION语句来显示。        MySQL允许子程序包含DDL语句,如CREATE和DROP。MySQL也允许存储程序(但不是存储函数)包含SQL 交互语句,如COMMIT。存储函数不可以包含那些做明确的和绝对的提交或者做回滚的语句。        存储子程序不能使用LOAD DATA INFILE。
ALTER {PROCEDURE | FUNCTION} sp_name [characteristic ...]characteristic:{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }| SQL SECURITY { DEFINER | INVOKER }| COMMENT 'string'
DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_nameSHOW CREATE {PROCEDURE | FUNCTION} sp_nameSHOW {PROCEDURE | FUNCTION} STATUS [LIKE 'pattern']
CALL sp_name([parameter[,...]])CALL语句可以用声明为OUT或的INOUT参数的参数给它的调用者传回值。它也“返回”受影响的行数,客户端程序可以在SQL级别通过调用ROW_COUNT()函数获得这个数,从C中是调用the mysql_affected_rows() C API函数来获得
BEGIN ... END复合语句[begin_label:] BEGIN    [statement_list]END [end_label]
变量的使用DECLARE var_name[,...] type [DEFAULT value]用来声明局部变量。SET var_name = expr [, var_name = expr] ...SELECT col_name[,...] INTO var_name[,...] table_expr
存储过程实例:CREATE PROCEDURE sp1 (x VARCHAR(5))    BEGIN        DECLARE xname VARCHAR(5) DEFAULT 'bob';        DECLARE newname VARCHAR(5);        DECLARE xid INT;        SELECT xname,id INTO newname,xid             FROM table1 WHERE xname = xname;        SELECT newname;    END;
函数实例:mysql> CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)            -> RETURN CONCAT('Hello, ',s,'!');            -> //Query OK, 0 rows affected (0.00 sec)

热点排行