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

如何将Oracle大表分块导出为CSV文件

Oracle 11g 结合SQL Developer 分批导出千万级大表为CSV的实现方法

方法1:基于ROWNUM分页查询分批导出(最易操作,无需额外权限)

  • 首先确定单批次导出的行数,建议单批次控制在50万~100万行,避免导出过程中内存溢出,比如设定每批导出50万行
  • 编写分页查询SQL,Oracle 11g不支持OFFSET语法,需使用嵌套ROWNUM实现分页,示例SQL如下,替换你自己的表名、字段名:
-- 第1批:1~500000行
SELECT 字段1,字段2,字段3 
FROM (
    SELECT t.*, ROWNUM rn 
    FROM 你的表名 t 
    WHERE ROWNUM <= 500000
) 
WHERE rn >= 1;
-- 第2批:500001~1000000行
SELECT 字段1,字段2,字段3 
FROM (
    SELECT t.*, ROWNUM rn 
    FROM 你的表名 t 
    WHERE ROWNUM <= 1000000
) 
WHERE rn >= 500001;
  • 每次执行完单批次查询后,在SQL Developer的查询结果集右上角,点击导出按钮,格式选择CSV,指定对应批次的文件名即可完成单批次导出,重复执行直到所有数据导出完成

注意:如果表有连续、无空洞的数值主键/排序字段,可以替换ROWNUM分页为按主键范围筛选,查询性能更高,示例:

SELECT * FROM 你的表名 WHERE 主键ID BETWEEN 1 AND 500000;

方法2:使用SQL Developer导出向导的分批参数配置(无需手动写分页SQL)

  • 打开SQL Developer,在左侧对象列表找到你的目标表,右键选择导出
  • 格式选择CSV,指定导出路径,进入筛选步骤
  • 在行限制和行偏移位置填写对应批次参数,比如第1批行偏移填0,行限制填500000;第2批行偏移填500000,行限制填500000,依次类推即可完成分批导出

注意:该方式底层也是调用Oracle分页查询实现,千万级表建议单批行数不要超过100万,否则行偏移过大时查询耗时会显著上升。

方法3:PL/SQL脚本自动生成多份CSV(适合无人值守导出场景)

如果你不想手动逐批操作,可以在SQL Developer中执行PL/SQL脚本自动生成分批CSV,需确保你有UTL_FILE的读写权限,示例脚本如下,替换对应参数即可:

DECLARE
    v_batch_size NUMBER := 500000; -- 自定义单批导出行数
    v_total_rows NUMBER;
    v_file UTL_FILE.FILE_TYPE;
    v_dir VARCHAR2(100) := '你的Oracle目录对象名'; -- 需提前在Oracle中创建指向服务端路径的DIRECTORY对象
BEGIN
    -- 获取目标表总记录数
    SELECT COUNT(*) INTO v_total_rows FROM 你的表名;
    -- 循环执行分批导出
    FOR i IN 0..CEIL(v_total_rows/v_batch_size)-1 LOOP
        v_file := UTL_FILE.FOPEN(v_dir, '表名_批次'||(i+1)||'.csv', 'w');
        -- 写入CSV表头
        UTL_FILE.PUT_LINE(v_file, '字段1,字段2,字段3');
        -- 写入当前批次数据
        FOR rec IN (
            SELECT 字段1,字段2,字段3 
            FROM (
                SELECT t.*, ROWNUM rn 
                FROM 你的表名 t 
                WHERE ROWNUM <= (i+1)*v_batch_size
            ) 
            WHERE rn > i*v_batch_size
        ) LOOP
            UTL_FILE.PUT_LINE(v_file, rec.字段1||','||rec.字段2||','||rec.字段3);
        END LOOP;
        UTL_FILE.FCLOSE(v_file);
    END LOOP;
END;
/

该方法生成的CSV文件存储在Oracle服务器对应的目录下,需提前申请数据库服务端的目录读写权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:24:09