从oracle导出成csv文件

博客介绍了从Oracle数据库导出成CSV文件的相关内容,聚焦于信息技术领域中数据库数据导出操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从oracle导出成csv文件

从oracle导出csv文件主要有两种方法

方法1、使用oracle server developer自带的功能

在数据库中找到想要导出的表,右键选择导出。去掉勾选的导出DDL,把格式改成csv,选择相应的编码方式

下一步之后,还可以添加where子句。

按提示操作即可。

方法2、使用oracle的内建包UTL_FILE

utl_file读写文件包 ,每分钟大约处理百万行。适用于大量导出时。

1)新建一个sql_to_csv的存储过程。


    
    
  1. CREATE
  2. OR REPLACE PROCEDURE SQL_TO_CSV (
  3. P_QUERY IN VARCHAR2, -- PLSQL文
  4. P_DIR IN VARCHAR2, -- 导出的文件放置目录
  5. P_FILENAME IN VARCHAR2 -- CSV名
  6. ) IS L_OUTPUT UTL_FILE.FILE_TYPE;
  7. L_THECURSOR INTEGER DEFAULT DBMS_SQL.OPEN_CURSOR;
  8. L_COLUMNVALUE VARCHAR2 (4000);
  9. L_STATUS INTEGER;
  10. L_COLCNT NUMBER := 0;
  11. L_SEPARATOR VARCHAR2 (1);
  12. L_DESCTBL DBMS_SQL.DESC_TAB;
  13. P_MAX_LINESIZE NUMBER := 32000;
  14. BEGIN
  15. --OPEN FILE
  16. L_OUTPUT := UTL_FILE.FOPEN (
  17. P_DIR,
  18. P_FILENAME,
  19. 'W',
  20. P_MAX_LINESIZE
  21. );
  22. --DEFINE DATE FORMAT
  23. EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_FORMAT=''YYYY-MM-DD HH24:MI:SS''';
  24. --OPEN CURSOR
  25. DBMS_SQL.PARSE (
  26. L_THECURSOR,
  27. P_QUERY,
  28. DBMS_SQL.NATIVE
  29. );
  30. DBMS_SQL.DESCRIBE_COLUMNS (
  31. L_THECURSOR,
  32. L_COLCNT,
  33. L_DESCTBL
  34. );
  35. --DUMP TABLE COLUMN NAME
  36. FOR I IN 1 ..L_COLCNT
  37. LOOP
  38. UTL_FILE.PUT (
  39. L_OUTPUT,
  40. L_SEPARATOR || '"' || L_DESCTBL (I ).COL_NAME || '"'
  41. );
  42. --输出表字段
  43. DBMS_SQL.DEFINE_COLUMN (
  44. L_THECURSOR,
  45. I,
  46. L_COLUMNVALUE,
  47. 4000
  48. );
  49. L_SEPARATOR := ',';
  50. END
  51. LOOP
  52. ;
  53. UTL_FILE.NEW_LINE (L_OUTPUT); --输出表字段
  54. --EXECUTE THE QUERY STATEMENT
  55. L_STATUS := DBMS_SQL. EXECUTE (L_THECURSOR);
  56. --DUMP TABLE COLUMN VALUE
  57. WHILE (
  58. DBMS_SQL.FETCH_ROWS (L_THECURSOR) > 0
  59. )
  60. LOOP
  61. L_SEPARATOR := '';
  62. FOR I IN 1 ..L_COLCNT
  63. LOOP
  64. DBMS_SQL.COLUMN_VALUE (
  65. L_THECURSOR,
  66. I,
  67. L_COLUMNVALUE
  68. );
  69. UTL_FILE.PUT (
  70. L_OUTPUT,
  71. L_SEPARATOR || '"' || TRIM (
  72. BOTH ' '
  73. FROM
  74. REPLACE (L_COLUMNVALUE, '"', '""')
  75. ) || '"'
  76. );
  77. L_SEPARATOR := ',';
  78. END
  79. LOOP
  80. ;
  81. UTL_FILE.NEW_LINE (L_OUTPUT);
  82. END
  83. LOOP
  84. ;
  85. --CLOSE CURSOR
  86. DBMS_SQL.CLOSE_CURSOR (L_THECURSOR);
  87. --CLOSE FILE
  88. UTL_FILE.FCLOSE (L_OUTPUT);
  89. EXCEPTION
  90. WHEN OTHERS THEN
  91. RAISE;
  92. END;
  93. /

2)创建导出路径

create or replace directory OUT_PATH as 'D:\out_path';  
    
    

注意:这步只是在oracle sql developer中定义了导出路径,如果路径不存在,并不会自动生成,需要手动去新建!

3) 执行导出命令


    
    
  1. EXEC sql_to_csv('select * from <tablename>','OUT_PATH','<filename>');

效率比较

第一个方法比较简单,但是导出速度上较慢,导出2亿多条的70GB数据大约需要2天半。

第二个方法相对需要一些设置,速度较快,导出2亿多条的70GB数据大约为20小时。(效率值都是我尝试下来的情况,不同环境可能会有所不同)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值