存储过程和函数
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、定义条件和处理程序
以上是关于存储过程和函数的主要内容,如果未能解决你的问题,请参考以下文章