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

    技术2022-07-10  130

    创建存储过程

    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='数据库名';
    Processed: 0.009, SQL: 9