MySQL ALTER语句修改存储过程和函数(附带实例)
在 MySQL 中,使用 ALTER 语句可以修改存储过程或函数的特性,语法格式如下:
修改存储过程使用 ALTER PROCEDURE 语句,修改存储函数使用 ALTER FUNCTION 语句。但是,这两个语句的结构是一样的,语句中的所有参数也是一样的。而且,它们与创建存储过程或函数的语句中的参数也是基本一样的。
【实例 1】修改存储过程 CountProc 的定义。将读写权限改为 MODIFIES SQL DATA,并指明调用者可以执行,代码如下:
【实例 2】修改存储函数 CountProc2 的定义,将读写权限改为 READS SQL DATA,并加上注释信息“FIND NAME”,代码如下:
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。