14.4 修改存储过程和函数
修改存储过程和函数是指修改已经定义好的存储过程和函数。MySQL中通过ALTER PROCEDURE语句来修改存储过程。通过ALTER FUNCTION语句来修改存储函数。本小节将详细讲解修改存储过程和函数的方法。
MySQL中修改存储过程和函数的语句的语法形式如下:ALTER {PROCEDURE | FUNCTION} sp_name [characteristic ...]
characteristic:
{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'
其中,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语句。但是,这两个语句的结构是一样的,语句中的所有参赛都是一样的。而且,它们与创建存储过程或函数的语句中的参数也是基本一样的。
【示例14-24】 下面修改存储过程num_from_employee的定义。将读写权限改为MODIFIES SQL DATA,并指明调用者可以执行。代码执行如下:ALTER PROCEDURE num_from_employee
MODIFIES SQL DATA
SQL SECURITY INVOKER ;
执行代码,并查看修改后的信息。结果显示如下://执行ALTE PROCEDURE语句
mysql>ALTER PROCEDURE num_from_employee
->MODIFIES SQL DATA
->SQL SECURITY INVOKER ;
Query OK, 0 rows affected (0.00 sec)
//查询修改后num_from_employee表的信息
mysql>SELECT SPECIFIC_NAME,SQL_DATA_ACCESS,
SECURITY_TYPE FROM informa-
tion_schema.Routines WHEREROUTINE_NAME='num_from_employee';
+-------------------------------+-------------
---------------------+-------------------------+
| SPECIFIC_NAME | SQL_DATA_ACCESS | SECURITY_TYPE |
+-------------------------------+------------
----------------------+-------------------------+
| num_from_employee | MODIFIES SQL DATA | INVOKER |
+-------------------------------+-----------
-----------------------+-------------------------+
1 row in set (0.00 sec)
结果显示,存储过程修改成功。从查询的结果可以看出,访问数据的权限(SQL_DATA_ACCESS)已经变成MODIFIES SQL DATA,安全类型(SECURITY_TYPE)已经变成了INVOKER。
【示例14-25】 下面修改存储函数name_from_employee的定义。将读写权限改为READS SQL DATA,并加上注释信息'FIND NAME'。代码执行如下:ALTER FUNCTION name_from_employee
READS SQL DATA
COMMENT 'FIND NAME' ;
执行代码,并查看修改后的信息。结果显示如下://执行ALTE FUNCTION语句
mysql>ALTER FUNCTION name_from_employee
->READS SQL DATA
->COMMENT 'FIND NAME' ;
Query OK, 0 rows affected (0.00 sec)
//查询修改后num_from_employee表的信息
mysql>SELECT SPECIFIC_NAME,SQL_DATA_ACCESS,
ROUTINE_COMMENT FROM information_schema.Routines
WHEREROUTINE_NAME='name_from_employee';
+--------------------------------+--------------
-----------------+-------------------------------+
| SPECIFIC_NAME | SQL_DATA_ACCESS | ROUTINE_COMMENT |
+--------------------------------+-------------
------------------+-------------------------------+
| name_from_employee | READS SQL DATA | FIND NAME |
+--------------------------------+----------------
---------------+-------------------------------+
1 row in set (0.01 sec)
结果显示,存储函数修改成功。从查询的结果可以看出,访问数据的权限(SQL_DATA_ACCESS)已经变成READS SQL DATA,函数注释(ROUTINE_COMMENT)已经变成了"FIND NAME"。
【责任编辑:云霞 TEL:(010)68476606】
点赞 0