2024年4月2日发(作者:)

创建:db2

-

td@

-vf createSQLproc

.db2

--end@ (

此处的@可替换成其他符号

)

调用:

db2

call

过程名(参数

)

1 基础

--声明变量:

DECLARE

<

variable-name

>

<

data-type>

<

DEFAULT

constant

>

--赋值:

SET

x=

10;

SET

y=(

SELECT

SUM

(c1)

from

T1);

VALUES

10

INTO

x;

SELECT

SUM

(c1)

INTO

y

from

T1

;

--会话全局变量:

CREATE

VARIABLE

var_name DATATYPE

[DEAFULT

value];

2 、数组

2.1

定义

CREATE

TYPE

mynames

as

VARCHAR(30

)

ARRAY

[];--定义数组

2.2

声明

DECLARE

nameArr mynames;--声明数组

2.3

SET

TESTARR=ARRAY[1

,2,

3,4

,5,

6,7

,8,

9,10

];SET

TESTARR

ES

(1),(

2)];--

方法1,使用

SET

语句

SELECT

SUM

(NUM)

INTO

TESTARR[1

]

FROM

(VALUES

(

1),(2

))

M

);--方法

2,使用VALUES INTO

语句

VALUES

1

INTO

TESTARR[1

];--方法

3,使用SELECT INTO

语句

SET

TESTARR[1]

=1;

--方法4,

使用ARRAY

构造函数

2.4

操作数组的函数

ARRAY_DELETE:删除数组元素

TRIM_ARRAY:从右开始删除指定数目

个元素

ARRAY_FIRST:返回数组中第一

个元素

ARRAY_LAST:返回数组中最后一

个元素

ARRAY_NEXT:返回数组下一个元素

ARRAY_PRIOR:返回数组前一个元素

ARRAY_VARIABLE:返回参数指定的元素

ARRAY_EXISTS:判断数组是否有元素

CARDINALITY:返回数组中元素的

个数

MAX_CARDINALITY:返回数组中元素的

个数

UNNEST:将数组转换

为表

3 复合语句

语法:

=ARRAY[VALU

AS

TEMP(NU

label:

BEGIN

[

ATOMIC

|

NOT

ATOMIC]

--ATOMIC

关键字封装的复合语句被当作一

个处理单元

--变量声明、过程逻辑等

END

label

4

流程控制

--条件判断IF

IF

<

condition>

THEN

procedure

statement>;

ELSEIF

>

THEN

procedure

statement>;

ELSE

procedure

statement>;

END

IF

;

IF

FRIEND='张三'

THEN

SET

MSG

='你好,张三

';

ELSEIF FRIEND='

李四'

THEN

SET

MSG

='你好,李四

';

ELSE

SET

MSG

='对不起,我不认识你

';

END

IF

;

--循环While

WHILE

<

condition>

DO

statements>;

END

WHILE

;

WHILE

I<=

10

DO

SET

NUM=

NUM+I

;

SET

I

=I+1

;

END

WHILE

;

--循环for

FOR

<

loop_name>

AS

<

sql

statements>

DO

statements>;

END

FOR

;

FOR

TEST

AS

SELECT

I

FROM

(VALUES(1),(2

DO

SET

NUM

=NUM+

I;

END

FOR

;

--循环LOOP

LABEL:LOOP

statements

>;

LEAVE LABEL;

),(3))

AS

TEMP(I

)