MYSQL存储过程的创建、调用和查看

创建存储过程

CREATE
    [DEFINER = { user | CURRENT_USER }]
 PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body
 
proc_parameter:
    [ IN | OUT | INOUT ] param_name type
 
characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
 
routine_body:
  Valid SQL routine statement
 
[begin_label:] BEGIN
  [statement_list]
    ……
END [end_label]
IN、OUT、INOUT 三种参数

IN 输入参数:
表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值

OUT 输出参数:
该值可在存储过程内部被改变,并可返回

INOUT 输入输出参数:
调用时指定,并且可被改变和返回

简化
CREATE
	PROCEDURE sp_name([[IN |OUT |INOUT ] 参数名 数据类形...])
BEGIN
	routine_body
END

DELIMITER // 或 DELIMITER ; 为修改分割符
MYSQL默认分割符为; 若不声明编译器会当成SQL处理,则编译报错。
事先修改分割符使编译存储过程成功。并在事后还原分割符

注: 若使用mysql管理工具可以不需要声明分割符

调用存储函数

call sp_name([proc_parameter[,...]])
示例
DELIMITER //  
CREATE PROCEDURE proc(IN a int)  
    BEGIN   
    SELECT a;   
    SET a=10;   
    SELECT a;   
    END//  
DELIMITER ; 

#调用
set @a = 1;
call  proc(@a)

存储过程查询

select ROUTINE_NAME,ROUTINE_TYPE from mysql.proc where db='数据库名';

或者

select ROUTINE_NAME,ROUTINE_TYPE from information_schema.routines where routine_schema='数据库名';

或者

show procedure status where db='数据库名';

你可能感兴趣的:(SQL)