这两天项目中用到OTL库,在产品部署时产生了一个问题“invalid LOB locator specified ”,
问题不是时时产生的,而是在指定记录中会产生这个异常,然后被OTL捕捉,
产生异常的位置都是在 otl_lob_stream >> otl_long_string 语句,
经排查不是set_max_long_size的问题。
后来发现原来与SQL SELECT语句中字段的排列顺序有关,LOB类型必须要排在所有字段的最后。
详见:http://otl.sourceforge.net/otl3_lob_stream.htm
The ODBC as well as DB2 CLI standards recommend that LOBs should be put at the end of INSERT/SELECT statements. For example:
INSERT INTO my_tab (f1,f2,f3_lob,f4_lob)...
SELECT f1,f2,f3_lob,f4_lob FROM my_tab...