-
1.1
SQL
过程的结构
命名规则:
1
、清洗过程名称命名:
PROC_
业务主题
_
目
标表(
PROC_JY_KJYRLJB
交易主题的卡交易日类聚表)
2
、函数名称命名:
PROC_
业务主题
_
函数名
(
PROC_JY_GETYWZL
交易主题取得卡业务种类函
数)
3
、变量命名:
VAR_
变量描述(
VAR_YWZL
业务种类变量)
4
、游标命名:
CUR_
游标描述(
CUR_KJYB
对卡交易表进行游标处理)
语法:
CREATE
PROCEDURE
过程名称
(
参数列表
DYNAMIC RESULT SETS
结果集数量
是否允许
SQL
LANGUAGE
SQL
BEGIN
SQL
过程体
END
范例
“
资产负债
.sql ”
中
第
1
行:
Create
Procedure eSheetDayly
定义了过程名称
参数列表为
Out ProcState
varchar(100
其定义
SQL
过程从客户应用获取,或返回客户应用的
0
个或多个参数,
参数
列表使用逗号侵害各个参数
参数类型有三种:
l IN
从客户应用检索值。其不能够在
SQL
过程体中修改
l OUT
向客户应用返回值
l INOUT
从客户应用检索值,并返回值
省略了结果集数量的定义,
default
< br>为
0
。即表示不返回结果集。
省略了是否允许
SQL
的说明。其值指出了存储过程是否会使用
SQL
语句,如
果使用,其类型如何:
l NO SQL
不能够执行任何
SQL
语句
l COTAINS SQL
可以执行不会读取
SQL
数据,也不会修改
SQL
数据的
SQL
语句
l READS SQL
DATA
可以包含不会修改
SQL
数据的
SQL
语句
l MODIFIES SQL
DATA
可以执行任何
SQL
语句
,除了不能够在存储过程中
支持的语句以外。
第
3~7
行,为注释,标明此为
SQL
过程,
编写、最后修改时间。注释为
“
--
”
开
始的行。
第
8
行和最后一行
199
共同标识出
SQL
过程体
过程体存储过程的逻辑内容,包括变量声明、条件控制、流控制语句、以及通
过
SQL
语句处理数据的过程。
另例:
CREATE
PROCEDURE bbgs_to_testinfo (IN var0 INTEGER , out
ret INTEGER ,
out ret_str varchar(5,
OUT errorLabel CHAR(32
SPECIFIC
bbgs_to_testinfo
RESULT SETS 1
LANGUAGE SQL
此定义为创建名为
bbgs_to_testinfo
的存储过程。它有
4
个参数:第一个
IN
参
数是
INTEGER
类型,第一个
OUT
参数是
INTEGER
类型,第二个
OUT
参数是
VARCHAR(5
类型,第三个
OUT
p>
参数是
CHAR(32
类型。指定的别名为
bbgs_to_testinfo
,将返回一个结果集。
p>
1.2
SQL
过程体
1.2.1
声明、设置变量
第
< br>9~61
行。
必须在
SQL
过程体的第一部分中声
明变量。必须指定惟一的标识符,声明
SQL
数据类型、并且
可以先把指定变量的初始值。变量声明的语法如下:
DECLARE
标识符
SQL
数据类型
[DEFAULT
默认值
]
1
、
SQLCODE
、
SQLSTATE
变量
13~14
行。
用于在
SQL
过程中处理错误和排错问题。它们的值代表了
SQL
过程体中最后
使用的
SQL
过程体中最后使用的
SQL
语句的返回值。
2
、游标申明
37~49
行。
declare curAsset cursor with hold for
3
、条件处理器
50~61
行。
当
SQL
语句返回超过
00000
的
SQLSTATE
< br>值时,会产生一个条件,表示出现
了错误、数据没有找到或者警告。
条件处理器可以决定
SQL
过程将如何响应一个或多个已定义的条件或预定义
条件组。其语法如下:
DECALRE
数据类型
HANDLER FOR
条件
[
,
…]
其有三种处理类型:
l
CONTINUE
处理器操作完成后,继续执行产生这个条件的语句之后的下一条
p>
语句。
l EXIT
处理器操作完成后,
SQL
过程将终止,并将控制返回给调用者。
l UNDO
处理器操作执行之前,
DB2
将回滚
SQL
过程中执行的
SQL
操作。完
成后,
SQL
过程将终止,并将控制返回给调用者。
其预定义了
3
个类的条件:
l NOT FOUND
标识导致
SQLCODE
值为
+100
或
SQLSTATE
值为
02000
的条
件。一
般在使用
SELECT
语句时出现。
l SQLEXCEPTION
标识导致
SQLCODE
值为负的条件
l
SQLWARNING
警告条件或导致
SQLCODE>10
0
的条件
1.2.2
控制结构流
常用的结构:
1
、
SET
为输出参数或者
SQL
变量赋值。
例如:
set
at_end=0;(66
行
set
vProcState=char(0||'00000 Success';
(164
行
set
vBal302=vBal302+vBal;(89
行
2
、
IF
IF
条
d
…
ELSEIF
条件
2 THEN
…
ELSE
…
END IF;
3
、
LOOP
多次执行一个代码块,直到
LEAVE(
跳出循环
、
ITERATE(
跳至标签循环的开
始
、
GOTO(
跳至指定标签块
。
例如:
76~161
行,请注意其中的
76<
/p>
、
77
、
152
、
153
、
1
61
行,它们与
51~55
行的条
p>
件处理器一同控制着循环流程。
4
、
WHILE
WHILE
条件
DO
…
END WHILE;
5
、
CASE
基于一个或多个条件的评估选择执行路径,
WHEN
子句将直接值与
CASE
表
达式中规定的变量进行比较。
例如:
87~128
行
1.2.3
在
SQL
过程体中使用
SQL
语句
1
、
直接使用
过程体中可以直接使用
SQL
语句。
例如:
第
62
行:
s
elect date(days(sDate+1 into today from
State;
查询得到的结果将通过
into
的方式赋给
SQL
过程变量
today
。
第
90<
/p>
行:
insert into ctBalanceSheet
values ( vDateCode ,vNodeCode,
vCurrencyCode, '01170', vBal
向表插入一条记录。
2
、
使用结果集
具体步骤如下:
1
声明游标
语法:
DECLARE
游标名
CURSOR WITH HOLD FOR
SELECT
语句;
WITH HOLD
表示打开游标保留打开状态,且这个游标定
位在结果表的下一逻
辑行的前面;
还可以用
WITH RETURN
指定
此游标用作存储过程中返回的结果集
合。
例如:
37~49
行,
declare
curAsset cursor with hold
for…
;定义了
curAsset
游标。
2
为结果集打开游标
打开游标,以便于它可以用于从其结果表中提取行。
语法:
OPEN
游标名;
例如:
69
行,
open
curAsset;
3
从结果集中取得查询数据
使用
FETCH
语句,它将游标定位
在其结果表中的下一行上,并给主机变量分
配这个行的值。
语法:
FETCH
游标名
INTO
主机变量
例如:
70~72
行
FETCH curAsset INTO
vNodeCode,vCurrencyCode,vBalSubjItemCode,vBal;
if at_end<>0 then goto Exit1;
end if;
此例应与
51~55
行的条件处理器一起理解。
当正常取到数据时,将游标的结果表中的数据赋给
INTO
后的主机变量列表中
的对应变量。
<
/p>
如果游标定位于结果表的未端
(
结果表为
空时也是
时,将产生一个
NOT F
OUND
条件,根据
51~55
行的声
明,将在处理器操作中改变
vProcState
和
at_end
的值。处理器操作完成后,继续处理下面的语句
71
行。
4
关闭结果集
当游标使用完后,需要将其关闭。
语法:
CLOSE
游标名
例如:
162
行,
close
curAsset;
如果
CREATE PROCEDURE
语句中的定义的返回结果集个数不为
0
,且此结
果集需要被返回给调用者时,则不能够被关闭。
3
、
使用动态
SQL
语句
具体步骤如下:
1
通过
DECLARE
语句声明
VARCHAR
类型变量作为
SQL
语句字符串
例如:第
9
行,
declare stmt
varchar(1000;
declare stmt1
varchar(1000;
2
给
SQL
语句字符串
赋值。用户不能够在语句
字符串中直接包含变量,相
反,必须使用?作为在语句中所使用的变量的参数标记符。<
/p>
例如:
第<
/p>
63
行,
set
stmt='delete from ctBalanceSheet';
set
stmt1 = 'insert into test_info values( ? ,? ';
3
使用
PREPARE
语句从语句字符串中生成经过准备的语句。
例如:
第
6
4
行,
prepare DelStmt from
stmt;
prepare ps from stmt;
4
使用
EXECUTE
语句执行经准备的语句。如
SQL
语句字符串
包含了参数标
记符,可以利用
USING
子句将变量值替代参数标记符。
例如:
第
6
5
行,
execute DelStmt;
execute ps using v_a1,v_a2;
1 SQL
存储过程说明
请参见参考程序
“
资产负债
.sql ”
(1 Create Procedure
eSheetDayly ( Out ProcState varchar(100
(2 Language SQL
(3 ---------
--------------------------------------------------
-------------
(4 -- SQL Procudure
(5 -- Jun 12,2002
(6 -- Last
Modification in Oct,2002
(7 -----------
--------------------------------------------------
-----------
(8 P1:Begin
(9
declare stmt varchar(1000;
(10 declare
vProcState varchar(100;
(11 declare
today date;
(12 declare vTable char(40;
(13 declare
sqlcode int default 0;
(14 declare
sqlstate char(5 default '00000';
(15
declare vAction varchar(100;
(16
declare vDateCode int;
(17 declare
vNodeCode char(4;
(18 declare
vCurrencyCode char(2;
(19 declare
vBalSubjItemCode char(6;
(20 declare
vBal decimal(16,2;
(21 declare
vLastNodeCode char(4;
(22 declare
vLastCurrencyCode char(2;
(23
--
期收期付款项
(24
declare vBal301 decimal(16,2 default 0;
(25 --
系统内款项
(26 declare vBal302 decimal(16,2
default 0;
(27
--
存放海外分支机构款项
(28
declare vBal303 decimal(16,2 default 0;
(29 --
海外分支机构
(30 declare vBal304 decimal(16,2
default 0;
(31
--
拨入营运资金
-
-
-
-
-
-
-
-
-
上一篇:PADS 元件库管理
下一篇:陶瓷原料英语专业术语大全