DB2存储过程学习总结

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Db2 存储过程学习总结

●在命令窗口执行存储过程,可以方便看出存储过程在哪一行出现错误,方便修改。

●db2 存储过程常用语句格式

----定义

DECLARE CC VARCHAR(4000);

DECLARE SQLSTR VARCHAR(4000);

DECLARE st STATEMENT;

DECLARE CUR CURSOR WITH RETURN TO CLIENT FOR CC;

----执行动态SQL不返回

PREPARE st FROM SQLSTR;

EXECUTE st;

----执行动态SQL返回

PREPARE CC FROM SQLSTR;

OPEN CUR;

----判断是否为空,使用值替代

COALESCE(判断对象,替代值)

----定义临时表

DECLARE GLOBAL TEMPORARY TABLE SESSION.TempResultTable

(

Organization int,

OrganizationName varchar(100),

AnimalTypeName varchar(20),

ProcessType int,

OperatorName varchar(100),

OperateCount int

)

WITH REPLACE -- 如果存在此临时表,则替换

NOT LOGGED;

DB2 9.x临时表使用总结

1). DB2的临时表需要用命令Declare Temporary Table来创建,并且需要创建在用户临时表空间上;

2). DB2在数据库创建时,缺省并不创建用户临时表空间,如果需要使用临时表,则需要用户在创建临时表之前创建用户临时表空间;

3). 临时表的模式为SESSION,SESSION即基于会话的,且在会话之间是隔离的。当会话结束时,临时表的数据被删除,临时表被隐式卸下。对临时表的定义不会在SYSCAT.TABLES中出现 .;

4). 缺省情况下,在Commit命令执行时,DB2临时表中的所有记录将被删除; 这可以通过创建临时表时指定不同的参数来控制;

5). 运行ROLLBACK命令时,用户临时表将被删除;

下面是DB2临时表定义的一个示例:

DECLARE GLOBAL TEMPORARY TABLE results

(

RECID VARCHAR(32) , --id

XXLY VARCHAR(100), --信息来源

LXDH VARCHAR(32 ), --信息来源联系电话

FKRQ DATE --反馈时间

) ON COMMIT PRESERVE ROWS WITH REPLACE NOT LOGGED;

----字符串函数

Substr

----隐形游标迭代

for 游标名as select....... do

使用游标名.字段名

内容区块

end for;

----直接返回值或变量

declare rs1 cursor with return to caller for select 0 from sysibm.sysdummy1;

----判断表是否存在

select count(*) into @exists from syscat.tables where tabschema = current schema and tabname='ZY_PROCESSLOG';

----取前面N条记录

select * from 表名FETCH FIRST N ROWS ONLY

----定义返回值

declare rs0 cursor with return to caller for select 0 from sysibm.sysdummy1;

declare rs1 cursor with return to caller for select 1 from sysibm.sysdummy1;

----得到插入的自增长列最大值

VALUES IDENTITY_VAL_LOCAL() INTO 变量

Merge into [A] using [B] on 条件when ***

通过这个merge你能够在一个SQL语句中对一个表同时执行inserts和updates操作. 当然是update还是insert是依据于你的指定的条件判断的,Merge into可以实现用B表来更新A表数据,如果A表中没有,则把B表的数据插入A表. MERGE命令从一个或多个数据源中选择行来updating或inserting到一个或多个表

语法如下

MERGE INTO [your table-name] [rename your table here]

USING ( [write your query here] )[rename your query-sql and using just like a table]

ON ([conditional expression here] AND [...]...)

WHEN MATHED THEN [here you can execute some update sql or something else ] WHEN NOT MATHED THEN [execute something else here ! ]

我们先看看一个简单的例子,来介绍一个merge into的用法

merge into products p using newproducts np on (p.product_id = np.product_id)

when matched then

update set p.product_name = np.product_name

when not matched then

insert values(np.product_id, np.product_name, np.category)

在这个例子里。前面的merger into products using newproducts 表示的用newproducts表来merge到products表,merge的匹配关系就是on后面的条件子句的内容,这里根据两个表的product_id来进行匹配,那么匹配上了我们的操作是就是when matched then的子句里的动作了,这里的动作是update set p.product_name = np.product_name, 很显然就是把newproduct里的内容,赋值到product的product_name里。如果没有匹配上则insert 这样的一条语句进去。大家看看这个merget inot的用法是不是一目了然了呀。这里merger 的功能,好比比较,然后选择更新或者是插入,是一系列的组合拳,在做merge的时候,这样同样的情况下,merge的性能是优于同等功能的update/insert语句的。

Oracle的substr函数简单用法

substr(字符串,截取开始位置,截取长度) //返回截取的字

substr('Hello World',0,1) //返回结果为'H' *从字符串第一个字符开始截取长度为1的字符串substr('Hello World',1,1) //返回结果为'H' *0和1都是表示截取的开始位置为第一个字符

substr('Hello World',2,4) //返回结果为'ello'

substr('Hello World',-3,3)//返回结果为'rld' *负数(-i)表示截取的开始位置为字符串右端向左数第i 个字符

测试:

select substr('Hello World',-3,3) value from dual;

相关文档
最新文档