Oracle:在SQL Developer中用纯SQL脚本批量导入CSV至对应表
仅用SQL脚本实现Oracle CSV导入及表结构生成方案
一、无需SQL*Loader/IMPDP的CSV导入方法(纯SQL)
可以利用Oracle的**外部表(External Tables)**实现纯SQL方式导入,步骤如下:
创建目录对象
先在数据库中映射CSV文件所在的操作系统路径,需具备CREATE ANY DIRECTORY权限:CREATE OR REPLACE DIRECTORY csv_dir AS '/实际的CSV文件存放路径';授予目录读写权限
给当前操作用户授予该目录的读写权限:GRANT READ, WRITE ON DIRECTORY csv_dir TO your_username;创建对应外部表
根据目标表结构和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;导入数据到目标表
外部表创建完成后,直接通过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
相关产品推荐
相关产品推荐

