如何在服务器里修改存储过程,14.4 修改存储过程和函数

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值