You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 16:07:07