How does oracle export the table to csv

CREATE  OR  REPLACE  PROCEDURE  SQL_TO_CSV
     (
         P_QUERY  IN  VARCHAR2,                         -- PLSQL文
         P_DIR  IN  VARCHAR2,                           -- 导出的文件放置目录
         P_FILENAME  IN  VARCHAR2                       -- CSV名
)
IS
         L_OUTPUT UTL_FILE.FILE_TYPE;
         L_THECURSOR  INTEGER  DEFAULT  DBMS_SQL.OPEN_CURSOR;
         L_COLUMNVALUE VARCHAR2(4000);
         L_STATUS  INTEGER ;
         L_COLCNT NUMBER := 0;
         L_SEPARATOR VARCHAR2(1);
         L_DESCTBL DBMS_SQL.DESC_TAB;
         P_MAX_LINESIZE NUMBER := 32000;
BEGIN
         --OPEN FILE
         L_OUTPUT := UTL_FILE.FOPEN(P_DIR, P_FILENAME, ‘W’, P_MAX_LINESIZE);
  
         --DEFINE DATE FORMAT
         EXECUTE  IMMEDIATE ‘ ALTER  SESSION  SET  NLS_DATE_FORMAT=’’YYYY-MM-DD HH24:MI:SS’’’;
  
         --OPEN CURSOR
         DBMS_SQL.PARSE( L_THECURSOR, P_QUERY, DBMS_SQL.NATIVE );
         DBMS_SQL.DESCRIBE_COLUMNS( L_THECURSOR, L_COLCNT, L_DESCTBL );
  
         --DUMP TABLE COLUMN NAME
         FOR  IN  1 .. L_COLCNT LOOP
             UTL_FILE.PUT( L_OUTPUT, L_SEPARATOR || ‘”’ || L_DESCTBL(I).COL_NAME || ‘”’ );
             DBMS_SQL.DEFINE_COLUMN( L_THECURSOR, I, L_COLUMNVALUE, 4000 );
             L_SEPARATOR := ‘,’;
         END  LOOP;
         UTL_FILE.NEW_LINE( L_OUTPUT );
  
         --EXECUTE THE QUERY STATEMENT
         L_STATUS := DBMS_SQL. EXECUTE (L_THECURSOR);
  
         --DUMP TABLE COLUMN VALUE
         WHILE ( DBMS_SQL.FETCH_ROWS(L_THECURSOR) > 0 ) LOOP
             L_SEPARATOR := ‘’;
             FOR  IN  1 .. L_COLCNT LOOP
                 DBMS_SQL.COLUMN_VALUE( L_THECURSOR, I, L_COLUMNVALUE );
                 UTL_FILE.PUT( L_OUTPUT, L_SEPARATOR || ‘”’ ||
                 TRIM(BOTH ‘ ‘  FROM  REPLACE (L_COLUMNVALUE,’”’,’””’)) || ‘”’);
                 L_SEPARATOR := ‘,’;
             END  LOOP;
             UTL_FILE.NEW_LINE( L_OUTPUT );
         END  LOOP;
  
         --CLOSE CURSOR
         DBMS_SQL.CLOSE_CURSOR(L_THECURSOR);
  
         --CLOSE FILE
         UTL_FILE.FCLOSE( L_OUTPUT );
EXCEPTION
         WHEN  OTHERS  THEN
         RAISE;
END ;

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326526868&siteId=291194637