(2020年)企业管理制度DB2编程序技巧

上传人:精****库 文档编号:139755022 上传时间:2020-07-23 格式:DOCX 页数:21 大小:15.30KB
返回 下载 相关 举报
(2020年)企业管理制度DB2编程序技巧_第1页
第1页 / 共21页
(2020年)企业管理制度DB2编程序技巧_第2页
第2页 / 共21页
(2020年)企业管理制度DB2编程序技巧_第3页
第3页 / 共21页
(2020年)企业管理制度DB2编程序技巧_第4页
第4页 / 共21页
(2020年)企业管理制度DB2编程序技巧_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《(2020年)企业管理制度DB2编程序技巧》由会员分享,可在线阅读,更多相关《(2020年)企业管理制度DB2编程序技巧(21页珍藏版)》请在金锄头文库上搜索。

1、DB2编程序技巧1 DB2编程 1.1 建存储过程时CREATE后一定不要用TAB键 3 1.2 使用临时表 3 1.3 从数据表中取指定前几条记录 3 1.4 游标的使用 4 注意commit和rollback 4 游标的两种定义方式 4 修改游标的当前记录的方法 5 1.5 类似DECODE的转码操作 5 1.6 类似CHARINDEX查找字符在字串中的位置 5 1.7 类似DATEDIF计算两个日期的相差天数 5 1.8 写UDF的例子 5 1.9 创建含IDENTITY值(即自动生成的ID)的表 6 1.10 预防字段空值的处理 6 1.11 取得处理的记录数 6 1.12 从存储过程

2、返回结果集(游标)的用法 6 1.13 类型转换函数 8 1.14 存储过程的互相调用 8 1.15 C存储过程参数注意 8 1.16 存储过程FENCE及UNFENCE 8 1.17 SP错误处理用法 9 1.18 IMPORT用法 9 1.19 VALUES的使用 9 1.20 给SELECT语句指定隔离级别 10 1.21 ATOMIC及NOTATOMIC区别 10 2 DB2编程性能注意 10 2.1 大数据的导表 10 2.2 SQL语句尽量写复杂SQL 10 2.3 SQLSP及CSP的选择 10 2.4 查询的优化(HASH及RR_TO_RS) 11 2.5 避免使用COUNT(

3、*)及EXISTS的方法 11 3 DB2表及SP管理 12 3.1 看存储过程文本 12 3.2 看表结构 12 3.3 查看各表对SP的影响(被哪些SP使用) 12 3.4 查看SP使用了哪些表 12 3.5 查看FUNCTION被哪些SP使用 12 3.6 修改表结构 12 4 DB2系统管理 13 4.1 DB2安装 13 4.2 创建DATABASE 14 4.3 手工做数据库远程(别名)配置 14 4.4 停止启动数据库实例 14 4.5 连接数据库及看当前连接数据库 14 4.6 停止启动数据库HEAD 15 4.7 查看及停止数据库当前的应用程序 15 4.8 查看本INSTA

4、NCE下有哪些DATABASE 15 4.9 查看及更改数据库HEAD的配置 16 4.9.1 改排序堆的大小 16 4.9.2 改事物日志的大小 16 4.9.3 出现程序堆内存不足时修改程序堆内存大小 16 4.10 查看及更改数据库实例的配置 16 4.10.1 打开对锁定情况的监控。 16 4.10.2 更改诊断错误捕捉级别 17 4.11 DB2环境变量 17 4.12 DB2命令环境设置 17 4.13 改变隔离级别 17 4.14 管理DBINSTANCE的参数 18 4.15 升级后消除版本问题 18 4.16 查看数据库表的死锁 181 DB2编程 1.1 建存储过程时Cre

5、ate后一定不要用TAB键 create procedure 的create后只能用空格,而不可用tab健,否则编译会通不过。 切记,切记。 1.2 使用临时表 要注意,临时表只能建在usertemporytablesspace上,如果database只有systemtemporytablespace是不能建临时表的。 另外,DB2的临时表和sybase及oracle的临时表不太一样,DB2的临时表是在一个session内有效的。所以,如果程序有多线程,最好不要用临时表,很难控制。 建临时表时最好加上withreplace选项,这样就可以不显示的drop临时表,建临时表时如果不加该选项而该临时

6、表在该session内已创建且没有drop,这时会发生错误。 1.3 从数据表中取指定前几条记录 select*fromtb_market_codefetchfirst1rowsonly 但下面这种方式不允许 selectmarket_codeintov_market_code fromtb_market_codefetchfirst1rowsonly; 选第一条记录的字段到一个变量以以下方式代替 declarev_market_codechar(1); declarecursor1cursorforselectmarket_codefromtb_market_code fetchfirst1

7、rowsonlyforupdate; opencursor1; fetchcursor1intov_market_code; closecursor1; 1.4 游标的使用 注意commit和rollback 使用游标时要特别注意如果没有加withhold选项,在Commit和Rollback时,该游标将被关闭。Commit和Rollback有很多东西要注意。特别小心 游标的两种定义方式 一种为 declarecontinuehandlerfornotfound begin setv_notfound=1; end; declarecursor1cursorwithholdforselectm

8、arket_codefromtb_market_code forupdate; opencursor1; setv_notfound=0; fetchcursor1intov_market_code; whilev_notfound=0Do -work setv_notfound=0; fetchcursor1intov_market_code; endwhile; closecursor1; 这种方式使用起来比较复杂,但也比较灵活。特别是可以使用withhold选项。如果循环内有commit或rollback而要保持该cursor不被关闭,只能使用这种方式另一种为 pcursor1:forl

9、oopcs1ascousor1cursoras selectmarket_codeasmarket_code fromtb_market_code forupdate do endfor; 这种方式的优点是比较简单,不用(也不允许)使用open,fetch,close。 但不能使用withhold选项。如果在游标循环内要使用commit,rollback则不能使用这种方式。如果没有commit或rollback的要求,推荐使用这种方式(看来For这种方式有问题)。 修改游标的当前记录的方法 updatetb_market_codesetmarket_code=0wherecurrentofcu

10、rsor1; 不过要注意将cursor1定义为可修改的游标 declarecursor1cursorforselectmarket_codefromtb_market_code forupdate; forupdate不能和GROUPBY、DISTINCT、ORDERBY、FORREADONLY及UNION,EXCEPT,orINTERSECT但UNIONALL除外)一起使用。 1.5 类似decode的转码操作 oracle中有一个函数 selectdecode(a1,1,n1,2,n2,n3)aa1from db2没有该函数,但可以用变通的方法 selectcasea1 when1then

11、n1 when2thenn2 elsen3 endasaa1from 1.6 类似charindex查找字符在字串中的位置 Locate(y,dfdasfay) 查找y在dfdasfay中的位置。 1.7 类似datedif计算两个日期的相差天数 days(date(2001-06-05)?Cdays(date(2001-04-01) days返回的是从0001-01-01开始计算的天数 1.8 写UDF的例子 C写见sqllibsamplescliudfsrv.c 1.9 创建含identity值(即自动生成的ID)的表 建这样的表的写法 CREATETABLEtest (t1SMALLIN

12、TNOTNULL GENERATEDALWAYSASIDENTITY (STARTWITH500,INCREMENTBY1), t2CHAR(1); 在一个表中只允许有一个identity的column.1.10 预防字段空值的处理 SELECTDEPTNO,DEPTNAME,COALESCE(MGRNO,ABSENT),ADMRDEPT FROMDEPARTMENT COALESCE函数返回()中表达式列表中第一个不为空的表达式,可以带多个表达式。 和oracle的isnull类似,但isnull好象只能两个表达式。 1.11 取得处理的记录数 declarev_countint; upda

13、te tb_test set t1=0 where t2=2; -检查修改的行数,判断指定的记录是否存在 getdiagnostics v_count=ROW_COUNT; 只对update,insert,delete起作用. 不对selectinto有效 1.12 从存储过程返回结果集(游标)的用法 1、建一sp返回结果集 CREATEPROCEDUREDB2INST1.Proc1() LANGUAGESQL resultsets2(返回两个结果集) - -SQL存储过程 - P1:BEGIN declarec1cursorwithreturntocallerfor selectmarket_code fromtb_market_code; -指定该结果集用于返回给调用者 declarec2cursorwithreturntocallerfor

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 企业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号