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

无需额外安装工具,除SQL Loader外用Bash脚本导入CSV至Oracle的方法

无需额外工具的Bash脚本导入CSV到Oracle方法

以下几种方法均基于Oracle自带的sqlplus工具(通常随Oracle客户端/服务器默认安装,无需额外部署),完全通过Bash脚本实现:

方法1:生成INSERT语句批量执行

通过Bash解析CSV内容,逐行生成INSERT语句,再通过sqlplus提交到Oracle数据库。适合小到中等规模的CSV文件。

示例脚本

#!/bin/bash

# 配置Oracle连接信息
ORACLE_USER="your_username"
ORACLE_PWD="your_password"
ORACLE_DB="your_tns_name_or_connection_string"
CSV_FILE="/path/to/your/data.csv"
TARGET_TABLE="your_target_table"

# 跳过CSV表头(如果有),用awk生成INSERT语句并处理特殊字符
awk -F ',' 'NR>1 {
    # 转义字段中的单引号
    gsub(/'\''/,"'\'''\''", $0)
    print "INSERT INTO '$TARGET_TABLE' VALUES('\''"$1"'\'', '\''"$2"'\'', '\''"$3"'\'');";
}' "$CSV_FILE" | sqlplus -s "$ORACLE_USER/$ORACLE_PWD@$ORACLE_DB" <<EOF
SET FEEDBACK OFF
SET HEADING OFF
SET ECHO OFF
COMMIT;
EXIT;
EOF

注意事项

  • 替换脚本中的连接信息、文件路径和表名
  • 若CSV字段包含逗号(带引号包裹),需修改awk的分隔符逻辑,比如处理带双引号的字段
  • 大文件可优化为批量提交(例如每1000条执行一次COMMIT)

方法2:使用Oracle外部表(高效适配大文件)

Oracle外部表允许直接读取服务器上的CSV文件,无需提前导入,可通过SQL直接将数据插入目标表。Bash脚本只需调用sqlplus完成外部表的创建、数据迁移和清理。

示例脚本

#!/bin/bash

ORACLE_USER="your_username"
ORACLE_PWD="your_password"
ORACLE_DB="your_tns_name_or_connection_string"
CSV_FILE="/path/to/your/data.csv"
TARGET_TABLE="your_target_table"
# 需提前在Oracle中创建对应DIRECTORY对象并授予读写权限
ORACLE_DIR="CSV_IMPORT_DIR"

# 执行SQL逻辑
sqlplus -s "$ORACLE_USER/$ORACLE_PWD@$ORACLE_DB" <<EOF
-- 创建临时外部表
CREATE TABLE temp_ext_table (
    col1 VARCHAR2(100),
    col2 NUMBER,
    col3 DATE
)
ORGANIZATION EXTERNAL (
    TYPE ORACLE_LOADER
    DEFAULT DIRECTORY $ORACLE_DIR
    ACCESS PARAMETERS (
        RECORDS DELIMITED BY NEWLINE
        SKIP 1
        FIELDS TERMINATED BY ','
        OPTIONALLY ENCLOSED BY '"'
        MISSING FIELD VALUES ARE NULL
    )
    LOCATION ('$(basename $CSV_FILE)')
)
REJECT LIMIT UNLIMITED;

-- 将外部表数据插入目标表
INSERT INTO $TARGET_TABLE SELECT * FROM temp_ext_table;
COMMIT;

-- 删除临时外部表
DROP TABLE temp_ext_table;
EXIT;
EOF

注意事项

  • 需提前在Oracle中创建DIRECTORY对象:CREATE DIRECTORY CSV_IMPORT_DIR AS '/path/to/csv/folder';,并授予权限:GRANT READ, WRITE ON DIRECTORY CSV_IMPORT_DIR TO your_username;
  • 外部表的字段定义必须与CSV文件的列顺序、数据类型完全匹配
  • 此方法性能远优于单条INSERT,适合GB级别的大文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:15:40