存储过程和函数

Posted jkin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存储过程和函数相关的知识,希望对你有一定的参考价值。

存储过程和函数语法以及调用

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后调用不需要再次编译,用户通过指定存储过程的名

字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象

一、创建存储过程和函数

1、创建存储过程

mysql中创建存储过程的语句是create procedure语句,使用call语句调用存储过程。存储过程也可以调用其它存储过程。

语法:

create procedure sp_name([proc_parameter])
[characteristics...] routine_body

create procedure用来创建存储过程的关键字。sp_name是存储过程名称,proc_parameter为存储过程参数列表。列表形式如下:

[IN | OUT | OUT] param_name type

IN表示入参,OUT表示出参,INOUT表示既可以入参也可以出参。param_name表示参数名称,type表示参数类型。

characteristics指定存储的过程的特性,有以下几种取值:

(1)、LANGUAGE SQL:说明routine_body部分由SQL组成,当前系统支持的语言为SQL。SQL是LANGUAGE特性的唯一值

(2)、[NOT] DETERMINITIC:指明存储过程的结果是否确定,DETERMINITIC表示结果确定的。每次执行存储过程,相同的输入得到相同的输出。NOT DETERMINITIC表示结果                不确定的,相同的输出可能不同的输出,默认为NOT DETERMINITIC。

(3)、{CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA}:指明子程序使用SQL的限制。CONTAINS SQL表明子程序包含SQL语句,但是不包含读写数据的               语句。NO SQL表名子程序不包含SQL语句。READS SQL DATA表名子程序包含读数据的语句。MODIFIES SQL DATA表明子程序包含写数据的语句。默认情况下,系统指               定默认值CONTAINS SQL。

(4)、SQL SECURITY{DEFINER | INVOKER}:指明谁有执行权限。DEFINER表示定义着可以执行,INVOKER表示有权限的调用者也可以执行。默认值是DEFINER。

(5)、COMMENT ‘string‘:注释信息,用来描述存储过程和函数

routine_body是SQL代码的内容。可以用BEGIN........END来表示SQL代码的开始和技术

例子:

create procedure test()
begin
select * from student;
end;

2、创建函数

创建函数需要用到CREATE FUNCTION关键字。基本语法格式如下:

create function func_name([proc_parameter])
returns type
[characteristics...] routine_body

create function是创建函数的关键字,func_name是函数名。proc_parameter是参数,有IN OUT INOUT三种,characteristics表示函数的特性,和存储过程一样,不再重复叙述。RETURNS type表示函数返回数据的类型。

例子:

create function test_func()
returns char(50)
return (select b from student where a = 1);
select test_func()                               # 调用函数

如果return语句返回值的类型不同于returns子句指定类型的值,返回值被强制为恰当的类型。

3、变量的使用

变量可以在子程序中声明并使用,这些变量的作用范围是BEGIN.....END程序中。

(1)、变量的定义

DECLARE var_name [, var_name].. data_type [DEFAULT value]

var_name 是局部变量的名称,DEFALULT给变量一个默认值。值除了可以给常数,还可以给一个表达式。如果没有默认值,则值为NULL

(2)、为变量赋值

定义变量后,为变量赋值可以改变变量的默认值。MySQL使用set语句为变量赋值。语法格式如下:

SET var_name = expr [,var_name = expr]....

MySQL还可以通过select....into.为变量复制

select colname[,....] into var_name[,....] table_expr

4、定义条件和处理程序

 

以上是关于存储过程和函数的主要内容,如果未能解决你的问题,请参考以下文章

MySQL数据库之存储过程与存储函数

java 登录过程 - android片段,异步任务登录,Asp.net控制器,存储库

如何优化C ++代码的以下片段 - 卷中的零交叉

特定存储过程或函数的源代码

MySQL基础--存储过程和函数

mysql-存储过程和函数-热身运动