DB2编程序技巧 (五)(db2使用教程)学到了

随心笔谈2年前发布 admin
216 0 0

文章摘要

本文介绍了DB2编程中的几个关键知识点: 1. **存储过程的隔离机制**: 使用`fence`和`unfence`两种方法来隔离存储过程,`fence`单独启用新的地址空间,`unfence`与调用它的进程共享地址空间。`fence`更安全,但某些情况下(如获取调用者PID)需要使用`unfence`。 2. **错误处理**: 在存储过程(SP)中调用需要返回值的函数,DB2会自动发出`SQLWarning`。用户可以通过定义标志变量和使用继续处理器,将这些警告自动插入日志,避免出现大量`SQLCODE=0`的警告信息。 3. **import语句的使用**: 在DB2中使用`import`时,需要指定schema,例如: ```db2 import from gh1.out of DEL messages err.txt insert into db2inst1.tb_dbf_match_ha``` 4. **values语句的使用**: 在多个`set`语句中为变量赋值时,可以考虑使用`values`语句将多个赋值语句合并为一句,以提高执行效率。但需注意,`values`语句不能将`null`值赋给变量。 5. **select语句的隔离级别**: 使用`with ur`指定隔离级别,可以将select语句与其他操作隔离,确保事务的串行性。 6. **原子操作与非原子操作**: 原子操作(`atomic`)将程序块作为一个整体执行,若任何语句失败,整个程序块被视为未执行。非原子操作则允许部分执行。 7. **大数据导表性能优化**: 导表时,建议先使用`export`将数据导出,再使用`load`导入目标表,这样比直接`select into`更高效。


正在看的db2教程是:DB2编程序技巧 (五)。1.16 存储过程fence及unfence

fence的存储过程单独启用一个新的地址空间,而unfence的存储过程和调用它的进程使用同一个地址空间。

一般而言,fence的存储过程比较安全。

但有时一些特殊的要求,如要取调用者的pid,则fence的存储过程会取不到,而只有unfence的能取到。

1.17 SP错误处理用法

如果在SP中调用其它的有返回值的,包括结果集、临时表和输出参数类型的SP,

DB2会自动发出一个SQLWarning。而在我们原来的处理中对于SQLWarning都

会插入到日志,这样子最后会出现多条SQLCODE=0的警告信息。

处理办法:

定义一个标志变量,比如DECLARE V_STATUS INTEGER DEFAULT 0,

在CALL SPNAME之后, SET V_STATUS = 1,

DECLARE CONTINUE HANDLER FOR SQLWARNING

BEGIN

IF V_STATUS <> 1 THEN

–警告处理,插入日志

SET V_STATUS = 0;

END IF;

END;

1.18 import用法

db2 import  from  gh1.out   of  DEL messages err.txt insert into  db2inst1.tb_dbf_match_ha

注意要加schma

1.19 values的使用

如果有多个 set  语句给变量付值,最好使用values语句,改写为一句。这样可以提高效率。

但要注意,values不能将null值付给一个变量。

values(null) into out_return_code;

这个语句会报错的。

1.20 给select 语句指定隔离级别

select * from tb_head_stock_balance with ur

1.21 atomic及not atomic区别

atomic是将该部分程序块指定为一个整体,其中任何一个语句失败,则整个程序块都相当于没做,包括包含在atomic块内的已经执行成功的语句也相当于没做,有点类似于transaction。

2  DB2编程性能注意

2.1 大数据的导表

应该是export后再load性能更好,因为load不写日志。

比select into 要好。

<

© 版权声明

相关文章