oracle存储过程导出scv文件

前端之家收集整理的这篇文章主要介绍了oracle存储过程导出scv文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

最近研究oracle存储过程导出excel文件,但是还没有实现分sheet页,还在继续研究;

oracle的utl_file包访问文件,必须设置文件访问路径,配置方法如下:

  1. 1alter system set utl_file_dir='e:\utl' scope=spfile;
  2. 2、在init.ora文件中,配置如下:
  3. UTL_FILE=E:\utl或者UTL_FILE_DIR=E:\utl
  1. sql> alter system set utl_file_dir='/u01/app/oracle' scope=spfile;

    System altered.

    sql> startup force;

    sql> show parameter utl_file


到出sql存储过程如下:

  1. create or replace procedure sql_to_csv(p_query in varchar2,-- plsql
  2. p_dir in varchar2,-- 导出的文件放置目录
  3. p_filename in varchar2,-- csv
  4. p_header in varchar2 --表头
  5. ) is
  6. l_thecursor integer default dbms_sql.open_cursor;
  7. l_colcnt number := 0;
  8. l_separator varchar2(2) := ',';
  9. l_desctbl dbms_sql.desc_tab;
  10. p_max_linesize number := 32000;
  11. lv_sql varchar2(32000);
  12. begin
  13. execute immediate 'alter session set nls_date_format=''yyyymmdd hh24:mi:ss''';
  14.  
  15. lv_sql := '
  16.  
  17. declare
  18. l_output utl_file.file_type;
  19. l_row varchar2(32000) := null;
  20. cursor c is ' || p_query || ';
  21. type tp_rows is table of c%rowtype index by pls_integer;
  22. r tp_rows;
  23. begin
  24. l_output := utl_file.fopen(''' || p_dir || ''',''' ||
  25. p_filename || '.csv'',''w'',' || p_max_linesize || ');
  26. utl_file.put_line(l_output,''' || p_header ||
  27. ''');
  28. open c;
  29.  
  30. loop
  31. fetch c bulk collect into r;
  32.  
  33. for i in 1..r.count loop
  34. l_row := ';
  35.  
  36. dbms_sql.parse(l_thecursor,p_query,dbms_sql.native);
  37. dbms_sql.describe_columns(l_thecursor,l_colcnt,l_desctbl);
  38. for i in 1 .. l_colcnt loop
  39. if i > 1 then
  40. lv_sql := lv_sql || ' || ''' || l_separator || ''' || ';
  41. end if;
  42. lv_sql := lv_sql || 'r(i).' || l_desctbl(i).col_name;
  43. end loop;
  44. dbms_sql.close_cursor(l_thecursor);
  45. lv_sql := lv_sql || ';
  46. utl_file.put_line(l_output,l_row,true);
  47. end loop;
  48. exit when c%notfound;
  49. end loop;
  50. close c;
  51.  
  52. utl_file.fclose( l_output );
  53. exception
  54. when others then
  55. utl_file.fclose( l_output );
  56. dbms_output.put_line(dbms_utility.format_error_backtrace);
  57. raise;
  58. end;';
  59.  
  60. dbms_output.put_line(lv_sql);
  61. execute immediate lv_sql;
  62.  
  63. -- utl_file.fremove(p_dir,to_char(sysdate,'yyyymmdd_')|| p_filename||'.csv');
  64. -- utl_file.frename(p_dir,p_filename||'.tmp',p_dir,'yyyymmdd_')|| p_filename||'.csv');
  65.  
  66. end;

猜你在找的Oracle相关文章