本文主要是介绍oracle 如何把表导出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
I
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
I
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
;
这篇关于oracle 如何把表导出csv的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!