现在的位置: 首页 > 综合 > 正文

MySQL-调用存储过程和函数

2018年01月08日 ⁄ 综合 ⁄ 共 1770字 ⁄ 字号 评论关闭

调用存储过程和函数

 

1.要使用这些已经定义好的存储过程和存储函数就必须要通过调用的方式来实现。

存储过程是通过CALL 语句来调用的。而存储函数的使用方法与MySQL内部函数的使用方法是一样的。

执行存储过程和存储函数需要拥有EXECUTE权限。EXECUTE 权限的信息存储在information_schema 数据库下面的USER_PRIVILEGES表中。

1.1调用存储过程

MySQL中使用CALL 语句来调用存储过程。调用存储过程后,数据库系统将执行存储过程中的语句。然后,将结果返回给输出值。CALL 语句的基本语法形式如下:
CALL  sp_name([parameter[,…]]);

sp_name为存储过程的名称,parameter为存储过程的参数。

1.2调用存储函数

MySQL中,存储函数的使用方法与MySQL内部函数的使用方法是一样的。换言之,用户自己定义的存储函数与MySQL内部函数是一个性质的。区别在于,存储函数是用户自己定义的,而内部函数是MySQL的开发者定义的。

SELECT function_name ([parameter[,…]]);

 

2.查看存储过程和函数

存储过程和函数创建以后,用户可以查看存储过程和函数的状态和定义。

用户可以通过SHOW STATUS语句来查看存储过程和函数的状态,

也可以通过SHOW CREATE语句来查看存储过程和函数的定义。

用户也可以通过查询information_schema 数据库下的Routines 表来查看存储过程和函数的信息。

1.SHOW { PROCEDURE | FUNCTION } STATUS [ LIKE  ' pattern ' ] ;
其中,“PROCEDURE” 参数表示查询存储过程;“FUNCTION” 参数表示查询存储函数;“LIKE ' pattern '” 参数用来匹配存储过程或函数的名称。

2  .SHOW CREATE 语句查看存储过程和函数的定义

SHOW CREATE { PROCEDURE | FUNCTION } sp_name ;
其中,“PROCEDURE” 参数表示查询存储过程;“FUNCTION” 参数表示查询存储函数;“sp_name”参数表示存储过程或函数的名称。

3  .从information_schema.Routines 表中查看存储过程和函数的信息

存储过程和函数的信息存储在information_schema 数据库下的Routines 表中。可以通过查询该表的记录来查询存储过程和函数的信息。

其基本语法形式如下:

SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME=' sp_name ' ;
其中,ROUTINE_NAME字段中存储的是存储过程和函数的名称;“sp_name”参数表示存储过程或函数的名称

3修改存储过程和函数.

修改存储过程和函数是指修改已经定义好的存储过程和函数。

MySQL中通过ALTER PROCEDURE语句来修改存储过程。

通过ALTER FUNCTION语句来修改存储函数。

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语句,但不包含输入输出的SQL语句

NO SQL  不包含SQL语句

READS SQL DATA 包含读数据的SQL语句

MODIFIES SQL DATA包含写数据的SQL语句

SQL SECURITY { DEFINER | INVOKER }致命权限执行。DEFINER 表示只有定义者自己才能够执行;INVOKER表示调用者可以执行。

COMMENT'string'是注释信息

6.删除存储过程和存储函数

删除存储过程和函数指删除数据库中已经存在的存储过程和函数。

MySQL中使用DROP PROCEDURE语句来删除存储过程。

通过DROP FUNCTION语句来删除存储函数。
其基本形式如下:
DROP { PROCEDURE| FUNCTION } sp_name;

抱歉!评论已关闭.