mysql 修改、删除存储过程

demo 创建存储 过程函数

-- ----------------------------
-- Procedure structure for `getDeptChild`
-- ----------------------------
DROP PROCEDURE IF EXISTS `getDeptChild`;
DELIMITER ;;
CREATE DEFINER=`sunxing_ccs`@`%` PROCEDURE `getDeptChild`(rootId VARCHAR(50))
BEGIN
    DECLARE ptemp VARCHAR (4000);                     #用于存储输出的depart_id字符串集
    DECLARE ctemp VARCHAR (4000);                     #用于存储当前的depart_id    
    SET ptemp = '';
    SET ctemp = rootId;
    WHILE ctemp IS NOT NULL DO             
        IF ptemp = '' THEN                 #判断是否为第一次查询,解决查询结果第一位为','的问题
            SET ptemp = concat(ptemp, ctemp);
        ELSE
            SET ptemp = concat(ptemp, ',', ctemp);
        end if;
#group_conca保存后面符合条件的depart_id   FIND_IN_SET查询当前ctemp里是否有与depart_upid相等的值
    SELECT group_concat(dept_uuid) INTO ctemp FROM ccs_dept WHERE FIND_IN_SET(parent_uuid, ctemp) > 0;
    END WHILE;
    SELECT ptemp;
END
;;
DELIMITER ;

1.  修改存储过程和函数

    使用  ALTER  语句可以修改存储过程或函数的特性,语法格式如下:

    ALTER   {  PROCEDURE  |  FUNCTION  }  sp_name  [  characteristic  ...  ]   

    其中,那  sp_name 参数表示存储过程或函数的名称;characteristic 参数指定存储函数的特性,可能的取值有:

    CONTAINS SQL  表示子程序包含  SQL 语句,但不包含读或写数据的语句。
    NO  SQL  表示了程序中不包含 SQL 语句。
    READS  SQL DATA  表示子程序中包含读数据的语句。
    MODIFIES  SQL DATA  表示子程序中包含写数据的语句。
    SQL  SECURITY  {  DEFINER  |   INVOKER  } 指明谁有权限来执行。
    DEFINER  表示只有定义者自己才能够执行。
    INVOKER 表示调用者可以执行。
    COMMENT  'string'  表示注释信息。
    【注】修改存储过程使用   ALTER PROCEDURE  语句,修改存储函数使用  ALTER  FUNCTION  语句,这两个语句的结构是一样的,语句中的所有参教也是一样的,而且,它们与创建存储过程或函数的语句中的参数基本也是一样的,

    【例】修改存储过程  CountProc 的定义,将读写权限改为  MODIFIES SQL DATA,并指明调用者可以执行。

修改之前:

mysql> SELECT   SPECIFIC_NAME  ,SQL_DATA_ACCESS  , SECURITY_TYPE
    -> FROM  information_schema.Routines
    -> WHERE  ROUTINE_NAME = 'CountProc1' AND  ROUTINE_TYPE = 'PROCEDURE';
+---------------+-----------------+---------------+
| SPECIFIC_NAME | SQL_DATA_ACCESS | SECURITY_TYPE |
+---------------+-----------------+---------------+
| CountProc1    | CONTAINS SQL    | DEFINER       |
+---------------+-----------------+---------------+
修改语句:

mysql> ALTER  PROCEDURE  CountProc1
    -> MODIFIES  SQL  DATA
    -> SQL  SECURITY  INVOKER;
Query OK, 0 rows affected (0.00 sec)
查看执行结果:

mysql> SELECT   SPECIFIC_NAME  ,SQL_DATA_ACCESS  , SECURITY_TYPE
    -> FROM  information_schema.Routines
    -> WHERE  ROUTINE_NAME = 'CountProc1' AND  ROUTINE_TYPE = 'PROCEDURE';
+---------------+-------------------+---------------+
| SPECIFIC_NAME | SQL_DATA_ACCESS   | SECURITY_TYPE |
+---------------+-------------------+---------------+
| CountProc1    | MODIFIES SQL DATA | INVOKER       |
+---------------+-------------------+---------------+
1 row in set (0.00 sec)


2.  删除存储过程和函数

    删除存储过程和函数可以使用  DROP 语句,其语法结构如下:

    DROP   {  PROCEDURE  |   FUNCTION   }   [  IF EXISTS ]    Sp_name

    sp_name  为要移除的存储过程或函数的名称。
    IF EXISTS  子句是  MySQL  的一个扩展。如果程序或函数不存储,它可以防止发生错误,产生一个用  SHOW WARNINGS 查看的警告。

    【例】删除存储过程和存储函数。代码如下:

mysql> DROP  PROCEDURE  CountProc;
Query OK, 0 rows affected (0.50 sec)
mysql> DROP  FUNCTION  CountProc2;

发布了207 篇原创文章 · 获赞 23 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/stone_tomcate/article/details/103735168