当前位置:首页 > DB2存储过程学习总结
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;
共分享92篇相关文档