SQL3116W报错非空列字段值缺失,LOAD命令如何指定使用列默认值
SQL3116W报错规避方案(DB2 LOAD导入场景)
报错原因
DB2的LOAD命令默认逻辑下,只有导入操作完全省略目标列时才会自动填充列默认值;输入文件中的显式NULL值会被LOAD直接尝试插入目标列,若该列设置了非空约束就会触发SQL3116W警告/报错。
可用规避方案
- 方案1:修改LOAD命令新增
USEDEFAULTS修饰符
该修饰符会指定LOAD工具对输入文件中的NULL值、缺失字段自动应用表定义的默认值,是改造成本最低的方案。修改后的命令如下:LOAD FROM ${LOADDIR}/${InputFile}.exp OF DEL MODIFIED BY COLDEL| USEDEFAULTS INSERT INTO TEMP_TABLE NONRECOVERABLE - 方案2:预处理导入文件
直接删除输入文件中对应时间戳列的整列字段占位,LOAD操作省略该列后会自动触发默认值填充,无需修改命令参数。 - 方案3:调整表列定义(适用于高频导入场景)
若后续需要反复向该表导入数据,可将时间戳列调整为GENERATED ALWAYS类型的自动时间戳,或是设置为IMPLICITLY HIDDEN,导入时无需额外处理即可自动填充默认值。
注意:如果目标时间戳列定义了
NOT NULL约束,未加USEDEFAULTS时插入显式NULL会直接触发约束校验失败,新增修饰符后会优先匹配默认值,不会触发校验报错。
内容的提问来源于stack exchange,提问作者rmaitipe
相关产品推荐
相关产品推荐

