关于DB2 9.5 与 DB2 8 insert语句兼容问题
feiky 2010-06-23 10:40:11 在DB2 8中,当使用insert语句插入时,如果没有指定具体的列,DB2插入时是不会处理的,比如表A(a,b,c,d)四列,插入语句 insert into A(A,C,D) VALUES('A','C','D') 这样的话DB2 8就收到后编译就只处理这个3个列的插入值,b列默认不处理的
可以换到DB2 9.5 下后 同样的表,同样的INSERT语句 DB2 9.5编译后会变成 insert into A(A,B,C,D) VALUES('A',NULL,'C','D')
将没有显示的B列 设置为NULL值,这样程序就报错了
怎么能避免这种情况,让DB2 9.5只处理我设置了列的值
下面是2个系统下快照
DB2 8
执行数 = 1
编译数 = 1
最差准备时间(毫秒) = 0
最佳准备时间(毫秒) = 0
已删除的内部行 = 未收集
已插入的内部行 = 未收集
已读取的行 = 未收集
已更新的内部行 = 未收集
已写入的行 = 未收集
语句排序 = 未收集
总计执行时间(秒.毫秒) = 未收集
总计用户 CPU 时间(秒.毫秒) = 未收集
总计系统 CPU 时间(秒.毫秒) = 未收集
语句文本 = INSERT INTO "DB2ADMIN"."PZ_CURRENCY" ( "PC_ACCOUNT_MONTH", "PC_CODE", "PC_NAME", "PC_RATE", "PC_DEFAULT", "PC_STATUS" ) VALUES ( '201005', 'EUR', '娆у厓', 9.790000, 'N', '1' )
db2 9.5快照
执行数 = 1
编译数 = 1
最差预编译时间(毫秒) = 0
最佳预编译时间(毫秒) = 0
已删除的内部行 = 未收集
已插入的内部行 = 未收集
已读取的行 = 未收集
已更新的内部行 = 未收集
已写入的行 = 未收集
语句排序 = 未收集
语句排序溢出 = 未收集
总计排序时间 = 未收集
缓冲池数据逻辑读取 = 未收集
缓冲池数据物理读取 = 未收集
缓冲池临时数据逻辑读取 = 未收集
缓冲池临时数据物理读取 = 未收集
缓冲池索引逻辑读取 = 未收集
缓冲池索引物理读取 = 未收集
缓冲池临时索引逻辑读取 = 未收集
缓冲池临时索引物理读取 = 未收集
缓冲池 xda 逻辑读取 = 未收集
缓冲池 xda 物理读取 = 未收集
缓冲池临时 xda 逻辑读取 = 未收集
缓冲池临时 xda 物理读取 = 未收集
总计执行时间(秒.毫秒) = 未收集
总计用户 CPU 时间(秒.毫秒) = 未收集
总计系统 CPU 时间(秒.毫秒) = 未收集
生成统计信息耗用的总时间(毫秒) = 未收集
同步 runstats 耗用的总时间(毫秒) = 未收集
语句文本 = INSERT INTO DB2ADMIN.PZ_CURRENCY ( PC_ACCOUNT_MONTH, PC_CODE, PC_NAME, PC_FNAME, PC_CURSIGN, PC_CURUNIT, PC_RATE, PC_DEFAULT, PC_NOTES, PC_LASTUSERID, PC_LASTTIME, PC_STATUS ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
像 PC_FNAME, PC_CURSIGN, 等这几个列都没在我的INSERT语句里,担9.5编译后都被加进来,设置了NULL值
结果报错
请高手指教