mysql之存储过程跟存储函数

mysql之存储过程跟存储函数

mysql之存储过程和存储函数

CREATE PROCEDURE 
sp_name ([
proc_parameter[,…]])

[
characteristic …] 
routine_body

CREATE FUNCTION
 
sp_name
 ([
func_parameter[,…]])

RETURNS
 
type [
characteristic
 …]
 
routine_body


proc_parameter:    [ IN | OUT | INOUT ] 
param_name type

type:    
Any valid MySQL data type

characteristic:    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_name

SHOW CREATE {PROCEDURE | FUNCTION}
 
sp_name

SHOW {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;

    

mysql之存储过程跟存储函数

相关文章:

你感兴趣的文章:

标签云: