打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
DB2 SQL存储过程语法官方权威指南(翻译)

创建SQL存储过程(CREATE PROCEDURE (SQL) statement )tdwitug

tdwitug

语法格式如下:tdwitug

tdwitug

>>-CREATE PROCEDURE--procedure-name----------------------------->tdwitug

>--+----------------------------------------------------+--*---->tdwitug

'-(--+------------------------------------------+--)-'tdwitug

| .-,------------------------------------. |tdwitug

| V .-IN----.                     | |tdwitug

'---+-------+--parameter-name--data-type-+-'tdwitug

+-OUT---+tdwitug

'-INOUT-'tdwitug

tdwitug

>--+-------------------------+--*------------------------------->tdwitug

'-SPECIFIC--specific-name-'tdwitug

tdwitug

.-DYNAMIC RESULT SETS 0--------.     .-MODIFIES SQL DATA-.tdwitug

>--+------------------------------+--*--+-------------------+--->tdwitug

'-DYNAMIC RESULT SETS--integer-'     +-CONTAINS SQL------+tdwitug

'-READS SQL DATA----'tdwitug

.-NOT DETERMINISTIC-.     .-CALLED ON NULL INPUT-.tdwitug

>--*--+-------------------+--*--+----------------------+--*----->tdwitug

'-DETERMINISTIC-----'tdwitug

tdwitug

.-INHERIT SPECIAL REGISTERS-.     .-7 OLD SAVEPOINT LEVEL-.tdwitug

>--+---------------------------+--*--+---------------------+---->tdwitug

'-7 NEW SAVEPOINT LEVEL-'tdwitug

.-LANGUAGE SQL-.     .-7 EXTERNAL ACTION----.tdwitug

>--7 *--+--------------+--*--+--------------------+--*------------>tdwitug

'-7 NO EXTERNAL ACTION-'tdwitug

tdwitug

>--+------------------------------+--3 *-------------------------->tdwitug

'-3 PARAMETER CCSID--+-3 ASCII---+-'tdwitug

'-3 UNICODE-'tdwitug

tdwitug

>--| SQL-procedure-body |--------------------------------------><tdwitug< p="">

SQL-procedure-body:tdwitug

|--SQL-procedure-statement--------------------------------------|tdwitug

tdwitug

语法说明tdwitug

1、procedure-name: 存储过程的名字,在同一个数据库的同一模式下,不能存在存储过程名相同参数数目相同的存储过程,即使参数的类型不同也不行。tdwitug

tdwitug

2、(IN | OUT | INOUT parameter-name data-type,...) :传入参数tdwitug

IN:输入参数tdwitug

OUT:输出参数tdwitug

INOUT:作为输入输出参数tdwitug

parameter-name:参数名字,在此存储过程中唯一的标识符。tdwitug

data-type:参数类型,可以接收SQL类型和创建的表。不支持LONG VARCHAR, LONG VARGRAPHIC, DATALINK, REFERENCE和用户自定义类型。tdwitug

tdwitug

tdwitug

3、SPECIFIC specific-name:唯一的特定名称(别名),可以用存储过程名代替,这个特定名称用于dorp存储过程,或者给存储过程添加注视 tdwitug

tdwitug

用,但不能调用存储过程。如果不指定,则数据库会自动生成一个yymmddhhmmsshhn时间戳的名字。推荐给出别名。tdwitug

tdwitug

4、DYNAMIC RESULT SETS integer:指定存储过程返回结果的最大数量。存储过程中虽然没有return语句,但是却能返回结果集。tdwitug

tdwitug

5、CONTAINS SQL, READS SQL DATA, MODIFIES SQL DATA: 指定存储过程中的SQL访问级别tdwitug

CONTAINS SQL: 表示存储过程可以执行中,既不可读取 SQL 数据,也不可修改 SQL 数据。tdwitug

READS SQL DATA: 表示存储过程可以执行中,可读取SQL,但不可修改 SQL 数据。tdwitug

MODIFIES SQL DATA: 表示存储过程可以执行任何 SQL 语句。可以对数据库中的数据进行增加、删除和修改。tdwitug

tdwitug

6、DETERMINISTIC or NOT DETERMINISTIC:表示存储过程是动态或者非动态的。动态的返回的值是不确定的。非动态的存储过程每次执行返回tdwitug

tdwitug

的值是相同的。tdwitug

tdwitug

7、CALLED ON NULL INPUT:表示可以调用存储过程而不管任何的输入参数是否为NULL,并且,任何的OUT或者INOUT参数可以返回一个NULL或者tdwitug

tdwitug

非空值。检验参数是否为NULL是在过程中进行的。tdwitug

tdwitug

8、INHERIT SPECIAL REGISTERS:表示继承专用寄存器。tdwitug

tdwitug

9、OLD SAVEPOINT LEVEL or NEW SAVEPOINT LEVEL:建立存储点。OLD SAVEPOINT LEVEL是默认的存储点。tdwitug

tdwitug

10、LANGUAGE SQL:指定程序的主体用的是SQL语言。tdwitug

tdwitug

11、EXTERNAL ACTION or NO EXTERNAL ACTION:表示存储过程是否执行一些改变理数据库状态的活动,而不通过数据库管理器管。默认是 tdwitug

tdwitug

EXTERNAL ACTION。如果指定为NO EXTERNAL ACTION ,则数据库会确定最最佳优化方案。tdwitug

tdwitug

12、PARAMETER CCSID:指定所有输出字符串数据的编码,默认为UNICODE编码数据库为PARAMETER CCSID UNICODE tdwitug

tdwitug

,其他的数据库默认为PARAMETER CCSID 3 ASCII。tdwitug

tdwitug

13、SQL-procedure-body:存储过程的主体tdwitug

tdwitug

例子1:产生一个SQL存储过程,返回员工的平均薪水. 返回所有员工超过平均薪水的数额,结果集包括name, position, and salary字段(参tdwitug

tdwitug

考数据库为db2的示例数据库sample)。tdwitug

tdwitug

CREATE PROCEDURE MEDIAN_RESULT_SET (OUT medianSalary DOUBLE)tdwitug

RESULT SETS 1tdwitug

LANGUAGE SQLtdwitug

BEGINtdwitug

DECLARE v_numRecords INT DEFAULT 1;tdwitug

DECLARE v_counter INT DEFAULT 0;tdwitug

DECLARE c1 CURSOR FORtdwitug

SELECT CAST(salary AS DOUBLE)tdwitug

FROM stafftdwitug

ORDER BY salary;tdwitug

DECLARE c2 CURSOR WITH RETURN FORtdwitug

SELECT name, job, CAST(salary AS INTEGER)tdwitug

FROM stafftdwitug

WHERE salary > medianSalarytdwitug

ORDER BY salary;tdwitug

DECLARE EXIT HANDLER FOR NOT FOUNDtdwitug

SET medianSalary = 6666;tdwitug

SET medianSalary = 0;tdwitug

SELECT COUNT(*) INTO v_numRecordstdwitug

FROM STAFF;tdwitug

OPEN c1;tdwitug

WHILE v_counter < (v_numRecords / 2 + 1)tdwitug

DOtdwitug

FETCH c1 INTO medianSalary;tdwitug

SET v_counter = v_counter + 1;tdwitug

END WHILE;tdwitug

CLOSE c1;tdwitug

OPEN c2;tdwitug

END

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
《SQLServer数据库应用基础教程》第八章存储过程及其应用
db2 存储过程 语法 及结果集查询
存储过程
数据库储存过程语法规则
MySQL存储过程的创建及调用
Mysql数据库存储过程基本语法讲解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服