我研究研究
我试试
可以自己写个存储过程实现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;
1 个赞
谢谢,我试试
你这个tidb支持存储吗
这个是oracle上运行导出数据的
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。