寻求Oracle针对各分区的动态INSERT语句(CHAR类型需TRIM)
Oracle 按分区生成带CHAR字段TRIM处理的动态INSERT语句
要实现针对源表每个分区执行INSERT,同时自动对所有CHAR/NCHAR类型字段做TRIM处理、其余字段保持原样的需求,无需手动逐个编写字段,可以利用Oracle的数据字典动态生成目标SQL脚本,具体实现如下:
动态生成SQL的脚本
SELECT 'INSERT INTO SCHEMA.TARGET_TABLE_NAME' || CHR(10) || 'SELECT ' || LISTAGG( CASE WHEN data_type IN ('CHAR', 'NCHAR') THEN 'TRIM(' || column_name || ')' ELSE column_name END, ',' || CHR(10) || ' ') WITHIN GROUP (ORDER BY column_id) || CHR(10) || 'FROM SCHEMA.SOURCE_TABLE_NAME PARTITION (' || partition_name || ');' AS generate_sql FROM all_tab_columns c JOIN all_tab_partitions p ON c.owner = p.table_owner AND c.table_name = p.table_name WHERE c.owner = 'SCHEMA' AND c.table_name = 'SOURCE_TABLE_NAME' GROUP BY p.partition_name ORDER BY p.partition_position;
脚本说明
- 字段处理逻辑:通过查询
all_tab_columns获取源表字段类型,对CHAR/NCHAR类型字段自动拼接TRIM()函数,非该类型字段直接保留原字段名 - 分区遍历:关联
all_tab_partitions获取源表的所有分区,为每个分区生成独立的INSERT语句 - 格式对齐:用
CHR(10)换行、LISTAGG按字段顺序拼接,生成的SQL格式清晰易读
示例生成结果
执行上述脚本后,会生成类似你提供的目标语句(以单个分区为例):
INSERT INTO SCHEMA.TARGET_TABLE_NAME SELECT M_NB, TRIM(M_INSTRUMENT), TRIM(M_H_FLOWTYPE), M_F_EXDIVD, M_SC_FC_AC, M_SC_FC_UC, M_G_BRK, M_F_LEG, M_F_DTEEVENT, TRIM(M_F_TYPELAB2), TRIM(M_TYPE_UFC), TRIM(M_USER_CUR), M_REF_DATA, M_CNT_ORG, M_F_AMOUNT, M_F_AMOUNTF, TRIM(M_F_ANALYTIC), TRIM(M_F_TYPELAB0), TRIM(M_F_TYPELAB1), TRIM(M_F_TYPELAB3), TRIM(M_F_TYPELAB4), M_H_F_CCNOM, TRIM(M_F_TYPE), M_F_VALUE, M_F_REF, TRIM(M_F_OBSCOM), TRIM(M_ACC_CUR), TRIM(M_AMD_STS), TRIM(M_F_FEECOD), TRIM(M_TP_CNTRP), M_TP_DTESYS, TRIM(M_TP_PFOLIO), TRIM(M_TP_RTFV0), M_TRN_GTYPE, M_F_CCFRMCD1, M_F_CCFRMCD2, M_F_CCFXGDT0, M_F_CCRATE, TRIM(M_F_CTP), TRIM(M_F_CURRENCY), TRIM(M_F_DESTLB), M_MX_REF_JOB, M_TP_RTCCP02, M_TP_RTCCP12 FROM SCHEMA.SOURCE_TABLE_NAME PARTITION (PARTITION_NAME);
注意事项
- 替换脚本中的
SCHEMA、SOURCE_TABLE_NAME、TARGET_TABLE_NAME为你的实际库名、源表名和目标表名 - 若仅操作当前用户下的表,可将
all_tab_columns和all_tab_partitions替换为user_tab_columns和user_tab_partitions,无需指定owner条件 - 确保执行脚本的用户拥有查询数据字典表的权限,以及源表的读权限、目标表的写权限
- 生成的SQL可直接复制执行,或通过
EXECUTE IMMEDIATE批量执行(需注意事务控制)
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

