创建
SQL
存储过程
(CREATE PROCEDURE (SQL) statement )
语法格式如下:
>>-CREATE PROCEDURE--procedure-name----------------------------->
>--+----------------------------------------------------+--*----> '-(--+------------------------------------------+--)-' | .-,------------------------------------. | | V .-IN----. | | '---+-------+--parameter-name--data-type-+-' +-OUT---+ '-INOUT-'
>--+-------------------------+--*------------------------------->
'-SPECIFIC--specific-name-'
.-DYNAMIC RESULT SETS 0--------. .-MODIFIES SQL DATA-.
>--+------------------------------+--*--+-------------------+---> '-DYNAMIC RESULT SETS--integer-' +-CONTAINS SQL------+ '-READS SQL DATA----' .-NOT DETERMINISTIC-. .-CALLED ON NULL INPUT-. >--*--+-------------------+--*--+----------------------+--*-----> '-DETERMINISTIC-----'
.-INHERIT SPECIAL REGISTERS-. .-7 OLD SAVEPOINT LEVEL-.
>--+---------------------------+--*--+---------------------+----> '-7 NEW SAVEPOINT LEVEL-' .-LANGUAGE SQL-. .-7 EXTERNAL ACTION----. >--7 *--+--------------+--*--+--------------------+--*------------> '-7 NO EXTERNAL ACTION-'
>--+------------------------------+--3 *-------------------------->
'-3 PARAMETER CCSID--+-3 ASCII---+-' '-3 UNICODE-'
>--| SQL-procedure-body |-------------------------------------->< SQL-procedure-body: |--SQL-procedure-statement--------------------------------------| |
语法说明
1
、
procedure-name:
存储过程的名字,在同一个数据库的同一模式下,不能存在存储过程名相同参数数目相同的存储过程,即使参数的类型不同也不行。
2
、
(IN | OUT | INOUT parameter-name data-type,...)
:传入参数
·
IN
:输入参数
·
OUT
:输出参数
·
INOUT
:作为输入输出参数
·
parameter-name
:参数名字,在此存储过程中唯一的标识符。
·
data-type:
参数类型,可以接收
SQL
类型和创建的表。不支持
LONG VARCHAR, LONG VARGRAPHIC, DATALINK, REFERENCE
和用户自定义类型。
3
、
SPECIFIC specific-name
:唯一的特定名称
(
别名
)
,可以用存储过程名代替,这个特定名称用于
dorp
存储过程,或者给存储过程添加注视
用,但不能调用存储过程。如果不指定,则数据库会自动生成一个
yymmddhhmmsshhn
时间戳的名字。推荐给出别名。
4
、
DYNAMIC RESULT SETS integer
:指定存储过程返回结果的最大数量。存储过程中虽然没有
return
语句,但是却能返回结果集。
5
、
CONTAINS SQL, READS SQL DATA, MODIFIES SQL DATA
:
指定存储过程中的
SQL
访问级别
CONTAINS SQL
:
表示存储过程可以执行中,既不可读取
SQL
数据,也不可修改
SQL
数据。
READS SQL DATA
:
表示存储过程可以执行中,可读取
SQL
,但不可修改
SQL
数据。
MODIFIES SQL DATA
:
表示存储过程可以执行任何
SQL
语句。可以对数据库中的数据进行增加、删除和修改。
6
、
DETERMINISTIC or NOT DETERMINISTIC
:表示存储过程是动态或者非动态的。动态的返回的值是不确定的。非动态的存储过程每次执行返回的值是相同的。
7
、
CALLED ON NULL INPUT
:表示可以调用存储过程而不管任何的输入参数是否为
NULL
,并且,任何的
OUT
或者
INOUT
参数可以返回一个
NULL
或者非空值。检验参数是否为
NULL
是在过程中进行的。
8
、
INHERIT SPECIAL REGISTERS
:表示继承专用寄存器。
9
、
OLD SAVEPOINT LEVEL or NEW SAVEPOINT LEVEL
:建立存储点。
OLD SAVEPOINT LEVEL
是默认的存储点。
10
、
LANGUAGE SQL
:指定程序的主体用的是
SQL
语言。
11
、
EXTERNAL ACTION or NO EXTERNAL ACTION
:表示存储过程是否执行一些改变理数据库状态的活动,而不通过数据库管理器管。默认是
EXTERNAL ACTION
。如果指定为
NO EXTERNAL ACTION ,
则数据库会确定最最佳优化方案。
12
、
PARAMETER CCSID
:指定所有输出字符串数据的编码
,
默认为
UNICODE
编码数据库为
PARAMETER CCSID UNICODE
,其他的数据库默认为
PARAMETER CCSID 3 ASCII
。
13
、
SQL-procedure-body
:存储过程的主体
例子
1
:产生一个
SQL
存储过程,返回员工的平均薪水
.
返回所有员工超过平均薪水的数额,结果集包括
name, position, and salary
字段
(
参考数据库为
db2
的示例数据库
sample)
。