我有一个带有从Oracle存储过程生成的WE8ISO8859P1
编码的CSV文件。是否有任何脚本行来定义UTF-8编码格式的CSV
文件的输出?
CREATE OR REPLACE
PROCEDURE export_main(dir VARCHAR2, file_name VARCHAR2)
IS
select_stmt VARCHAR2(100) := 'SELECT MTYPE || '','' || MNO FROM MAIN';
cur INTEGER;
file UTL_FILE.FILE_TYPE;
row_value VARCHAR2(4000);
ret INTEGER;
BEGIN
-- Open a cursor for the specified SELECT statement
cur := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(cur, select_stmt, DBMS_SQL.NATIVE);
ret := DBMS_SQL.EXECUTE(cur);
-- All columns were concatenated into single value in SELECT
DBMS_SQL.DEFINE_COLUMN(cur, 1, row_value, 4000);
-- Open the file for writing
--file := UTL_FILE.FOPEN(UPPER(dir), file_name, 'w', 32767);
file := UTL_FILE.FOPEN_NCHAR(UPPER(dir), file_name, 'w', 32767);
-- Export rows one by one
LOOP
ret := DBMS_SQL.FETCH_ROWS(cur);
EXIT WHEN ret = 0;
-- Get the value
row_value := NULL;
DBMS_SQL.COLUMN_VALUE(cur, 1, row_value);
-- Write the row to the file
-- UTL_FILE.PUT_LINE(file, row_value);
UTL_FILE.PUT_LINE_NCHAR(file, TO_NCHAR(row_value));
END LOOP;
UTL_FILE.FCLOSE(file);
DBMS_SQL.CLOSE_CURSOR(cur);
EXCEPTION WHEN NOT_LOGGED_ON THEN
DBMS_OUTPUT.PUT_LINE ('A program issues a database call without being connected to Oracle.');
END;
Oracle数据库用WE8ISO8859P1
编码,postgres DB用UTF-8
编码
我需要使用存储过程将CSV文件导入Postgres DB表,在postgres中,默认编码是UTF-8
。
发布于 2017-05-25 08:20:24
此过程将存储在缓冲区参数中的文本字符串写入由文件句柄标识的打开文件。使用此函数,您可以用Unicode而不是在数据库字符集中编写文本文件。
所以你可以试试这样的方法:
-- Write the row to the file
UTL_FILE.PUT_LINE_NCHAR(file, TO_NCHAR(row_value));
https://dba.stackexchange.com/questions/174538
复制相似问题