8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png
oracle生成插入语句 Oracle
admin 4天前


-- 替换 :table_name 为实际表名(大写)
WITH cols AS (
    SELECT 
        c.column_name,
        c.data_type,
        cm.comments AS column_comment,
        c.column_id,
        CASE 
            WHEN c.data_type IN ('VARCHAR2','CHAR') THEN ''''''
            WHEN c.data_type IN ('NUMBER','INTEGER') THEN '0'
            WHEN c.data_type IN ('DATE','TIMESTAMP') THEN 'SYSDATE'
            ELSE 'NULL'
        END AS default_val
    FROM all_tab_columns c
    LEFT JOIN all_col_comments cm 
        ON c.owner = cm.owner 
        AND c.table_name = cm.table_name 
        AND c.column_name = cm.column_name
    WHERE c.owner = CASE WHEN INSTR('&table_name','.')>0 
                         THEN SUBSTR('&table_name',1,INSTR('&table_name','.')-1)
                         ELSE USER END
      AND c.table_name = CASE WHEN INSTR('&table_name','.')>0 
                              THEN SUBSTR('&table_name',INSTR('&table_name','.')+1)
                              ELSE '&table_name' END
    ORDER BY c.column_id
),
col_with_comma AS (
    SELECT 
        c.*,
        CASE 
            WHEN ROW_NUMBER() OVER (ORDER BY column_id) < COUNT(*) OVER () 
            THEN ' --' 
            ELSE '' 
        END AS trailing_comma
    FROM cols c
)
SELECT 
    'INSERT INTO &table_name (' || CHR(10) ||
    LISTAGG(
        RPAD(column_name||',', 30) || 
        CASE WHEN column_comment IS NOT NULL 
             THEN ' -- ' || l 
             ELSE '' 
        END || trailing_comma || CHR(10),
        ''
    ) WITHIN GROUP (ORDER BY column_id) ||
    ')' || CHR(10) ||
    'SELECT ' || CHR(10) ||
    LISTAGG(
        RPAD(default_val || ' AS ' || column_name||',', 40) ||
        CASE WHEN column_comment IS NOT NULL 
             THEN ' -- ' || column_comment 
             ELSE '' 
        END || trailing_comma || CHR(10),
        ''
    ) WITHIN GROUP (ORDER BY column_id) ||
    'FROM DUAL;' AS generate_sql
FROM col_with_comma;

 

 

对于大表用下面这个

-- 替换 :table_name 为实际表名(大写)
WITH cols AS (
    SELECT 
        c.column_name,
        c.data_type,
        cm.comments AS column_comment,
        c.column_id,
        CASE 
            WHEN c.data_type IN ('VARCHAR2','CHAR','NVARCHAR2','NCHAR') THEN 'NULL'
            WHEN c.data_type IN ('NUMBER','INTEGER','FLOAT') THEN '0'
            WHEN c.data_type IN ('DATE','TIMESTAMP') THEN 'SYSDATE'
            ELSE 'NULL'
        END AS default_val
    FROM all_tab_columns c
    LEFT JOIN all_col_comments cm 
        ON c.owner = cm.owner 
        AND c.table_name = cm.table_name 
        AND c.column_name = cm.column_name
    WHERE c.owner = CASE WHEN INSTR('&table_name','.')>0 
                         THEN SUBSTR('&table_name',1,INSTR('&table_name','.')-1)
                         ELSE USER END
      AND c.table_name = CASE WHEN INSTR('&table_name','.')>0 
                              THEN SUBSTR('&table_name',INSTR('&table_name','.')+1)
                              ELSE '&table_name' END
)
SELECT 
    '-- ============================================' || CHR(10) ||
         '-- 表:&table_name' || CHR(10) ||
         '-- 生成时间:' || TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') || CHR(10) ||
         '-- ============================================' || CHR(10) || CHR(10) ||
    'INSERT INTO &table_name (' || CHR(10) ||
    XMLAGG(XMLELEMENT(e, 
        RPAD(column_name||',', 30) || 
        CASE WHEN column_comment IS NOT NULL 
             THEN ' -- ' || column_comment 
             ELSE ' --' 
        END || CHR(10)
    ) ORDER BY column_id).EXTRACT('//text()').GETCLOBVAL() ||
    ')' || CHR(10) || 'SELECT ' || CHR(10) ||
    XMLAGG(XMLELEMENT(e, 
        RPAD(default_val || ' AS ' || column_name||',', 40) ||
        CASE WHEN column_comment IS NOT NULL 
             THEN ' -- ' || column_comment 
             ELSE ' --' 
        END || CHR(10)
    ) ORDER BY column_id).EXTRACT('//text()').GETCLOBVAL() ||
    'FROM DUAL;' AS generate_sql
FROM cols;
最后于 4天前 被admin编辑 ,原因:
最新回复 (0)
    • 朕弟分享 | 专注小众,乐于分享!
      2
          
返回
发新帖 搜索 反馈 回顶部