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

Oracle:在SQL Developer中用纯SQL脚本批量导入CSV至对应表

仅用SQL脚本实现Oracle CSV导入及表结构生成方案

一、无需SQL*Loader/IMPDP的CSV导入方法(纯SQL)

可以利用Oracle的**外部表(External Tables)**实现纯SQL方式导入,步骤如下:

  1. 创建目录对象
    先在数据库中映射CSV文件所在的操作系统路径,需具备CREATE ANY DIRECTORY权限:

    CREATE OR REPLACE DIRECTORY csv_dir AS '/实际的CSV文件存放路径';
    
  2. 授予目录读写权限
    给当前操作用户授予该目录的读写权限:

    GRANT READ, WRITE ON DIRECTORY csv_dir TO your_username;
    
  3. 创建对应外部表
    根据目标表结构和CSV格式(如分隔符、日期格式等)创建外部表,示例如下(假设目标表为EMP,CSV为逗号分隔、文本含双引号):

    CREATE TABLE emp_ext (
      empno NUMBER(4),
      ename VARCHAR2(10),
      job VARCHAR2(9),
      mgr NUMBER(4),
      hiredate DATE,
      sal NUMBER(7,2),
      comm NUMBER(7,2),
      deptno NUMBER(2)
    )
    ORGANIZATION EXTERNAL (
      TYPE ORACLE_LOADER
      DEFAULT DIRECTORY csv_dir
      ACCESS PARAMETERS (
        RECORDS DELIMITED BY NEWLINE
        FIELDS TERMINATED BY ','
        OPTIONALLY ENCLOSED BY '"'
        MISSING FIELD VALUES ARE NULL
        (
          empno, ename, job, mgr,
          hiredate DATE 'YYYY-MM-DD', -- 匹配你的CSV日期格式
          sal, comm, deptno
        )
      )
      LOCATION ('emp.csv') -- 对应你的CSV文件名
    )
    REJECT LIMIT UNLIMITED;
    
  4. 导入数据到目标表
    外部表创建完成后,直接通过INSERT SELECT将数据写入正式表:

    INSERT INTO emp SELECT * FROM emp_ext;
    COMMIT;
    

    注:20张表只需重复步骤3-4,调整外部表字段、CSV文件名即可匹配对应表。

二、批量生成表的列定义脚本

通过查询Oracle数据字典视图,自动拼接CREATE TABLE语句,示例SQL如下:

SELECT 'CREATE TABLE ' || table_name || ' (' ||
       LISTAGG(column_name || ' ' || data_type || 
               CASE WHEN data_type LIKE '%CHAR%' THEN '(' || data_length || ')' ELSE '' END ||
               CASE WHEN nullable = 'N' THEN ' NOT NULL' ELSE '' END, ',
       ') WITHIN GROUP (ORDER BY column_id) || ');' AS create_table_script
FROM user_tab_columns
WHERE table_name IN ('TABLE1', 'TABLE2', 'TABLE3') -- 替换为你的20个表名,去掉WHERE则生成所有用户表
GROUP BY table_name;

补充优化:

  • 若需要包含默认值、主键等约束,可关联USER_CONSTRAINTS、USER_CONS_COLUMNS视图扩展脚本;
  • 用SPOOL命令将结果导出为SQL文件:
    SPOOL /保存路径/create_tables.sql
    -- 执行上面的SELECT语句
    SPOOL OFF
    

内容的提问来源于stack exchange,提问作者Donny Alexander

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:52:37