DB2中如何使用cursor load向修改表结构后的新增列插入空值
DB2使用CURSOR LOAD加载旧数据到新结构表的操作步骤
前提说明
你已经完成旧表备份、按新结构重建my_Table的操作,以下方法可以实现旧数据正常导入、新增列填充空白值的需求。
操作步骤
- 首先确认你的旧数据备份可以被SQL查询访问:如果是备份成了同结构的备份表(比如
my_Table_bak)可以直接用,要是备份成了IXF等格式的导出文件,先导入到临时备份表即可。 - 定义游标时按需构造查询结果,匹配新表的列结构:如果新增列需要填充空值/空串,直接在游标查询的对应位置补对应值即可,不需要额外配置加载规则。
代码示例
场景1:新增列允许为NULL,默认填充NULL即可
-- 连接数据库 CONNECT TO 你的数据库名; -- 定义游标,仅查询旧表所有原有列 DECLARE cur_bak CURSOR FOR SELECT 旧列1, 旧列2, 旧列3... FROM my_Table_bak; -- 执行CURSOR LOAD,不在游标结果中的新增列会自动填充默认值(没设默认值则填NULL) LOAD FROM cur_bak OF CURSOR INSERT INTO my_Table;
场景2:新增列是字符类型,需要填充空串而非NULL
假设新表的列顺序为 旧列1, 旧列2, 新增列(varchar类型), 旧列3,直接在游标查询的对应位置补空串即可:
CONNECT TO 你的数据库名; DECLARE cur_bak CURSOR FOR SELECT 旧列1, 旧列2, '', 旧列3... FROM my_Table_bak; LOAD FROM cur_bak OF CURSOR INSERT INTO my_Table;
可选优化项
- 数据量较大时可以加
NONRECOVERABLE参数减少日志开销:LOAD FROM cur_bak OF CURSOR NONRECOVERABLE INSERT INTO my_Table; - 加载完成后执行
RUNSTATS ON TABLE my_Table;更新表统计信息,保证后续查询性能。
内容的提问来源于stack exchange,提问作者Aieshwaryathakur
相关产品推荐
相关产品推荐

