首页 > 编程笔记 > MySQL笔记 阅读:17

MySQL ALTER语句修改存储过程和函数(附带实例)

MySQL 中,使用 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 语句。但是,这两个语句的结构是一样的,语句中的所有参数也是一样的。而且,它们与创建存储过程或函数的语句中的参数也是基本一样的。

【实例 1】修改存储过程 CountProc 的定义。将读写权限改为 MODIFIES SQL DATA,并指明调用者可以执行,代码如下:
ALTER  PROCEDURE  CountProc  MODIFIES SQL DATA SQL SECURITY INVOKER ;
执行代码,并查看修改后的信息。结果显示如下:
//执行ALTER PROCEDURE语句
mysql> ALTER  PROCEDURE  CountProc MODIFIES SQL DATA  SQL SECURITY INVOKER;
//查询修改后的CountProc表信息
mysql> SELECT SPECIFIC_NAME,SQL_DATA_ACCESS,SECURITY_TYPE
   -> FROM information_schema.Routines
   -> WHERE ROUTINE_NAME='CountProc' AND ROUTINE_TYPE='PROCEDURE';
+---------------+-----------------+---------------+
| SPECIFIC_NAME | SQL_DATA_ACCESS | SECURITY_TYPE |
+---------------+-----------------+---------------+
| CountProc     |MODIFIES SQL DATA| INVOKER       |
+---------------+-----------------+---------------+
结果显示,存储过程修改成功。从查询的结果可以看出,访问数据的权限(SQL_DATA_ ACCESS)已经变成 MODIFIES SQL DATA,安全类型(SECURITY_TYPE)已经变成 INVOKER。

【实例 2】修改存储函数 CountProc2 的定义,将读写权限改为 READS SQL DATA,并加上注释信息“FIND NAME”,代码如下:
ALTER  FUNCTION  CountProc2 READS SQL DATA COMMENT 'FIND NAME' ;
执行代码,并查看修改后的信息。结果显示如下:
//执行ALTER FUNCTION语句
mysql> ALTER  FUNCTION  CountProc2  READS SQL DATA   COMMENT 'FIND NAME' ;
Query OK, 0 rows affected (0.00 sec)
//查看修改后的信息
mysql> SELECT SPECIFIC_NAME,SQL_DATA_ACCESS,ROUTINE_COMMENT
FROM information_schema.Routines
WHERE ROUTINE_NAME='CountProc2'  AND  ROUTINE_TYPE = 'FUNCTION';
+-------------------+------------------+-----------------+
| SPECIFIC_NAME     | SQL_DATA_ACCESS  | ROUTINE_COMMENT |
+-------------------+------------------+-----------------+
| CountProc2        | READS SQL DATA   | FIND NAME       |
+-------------------+------------------+-----------------+
存储函数修改成功。从查询的结果可以看出,访问数据的权限(SQL_DATA_ACCESS)已经变成 READS SQL DATA,函数注释(ROUTINE_COMMENT)已经变成 FIND NAME。

相关文章