[英]Export table to csv file by using procedure (csv name with timestamp)
我想將一個表導出到每個csv文件,並用時間戳命名該csv文件。 例如,如果我有一個表t1
,則在導出后,將生成一個csv文件名t1.YYYYMMDDHHMISS.csv。 這是我的代碼:
create or replace procedure
T_to_CSV(Tname varchar2,Directory varchar2)
BEGIN
set colsep , -- separate columns with a comma
set pagesize 0 -- No header rows
set trimspool on -- remove trailing blanks
set headsep off -- this may or may not be useful...depends on your
spool timestamp.csv --don't know how to write in directory
select *
from Tname
end
這是我的問題:
(1)我不知道如何將csv文件輸出到需要的目錄中,請如何解決假脫機代碼?
我應該使用假脫機D:\\path\\filename.csv
嗎?
(2)在假脫機行中,如何使用時間戳now()更改csv文件的名稱?
有幾個步驟:
GRANT read,write on DIRECTORY my_dir to the_user;
的用戶GRANT read,write on DIRECTORY my_dir to the_user;
我已經用過了,效果很好。
用法
data_dump ( 'Select emp_name from emp',
CURRENT_TIMESTAMP||'filename.csv',
my_dir);
(大大簡化了示例!)
創建目錄后,通過運行以下命令驗證您的工作:
假脫機文件將與.sql文件創建在同一目錄中
SET COLSEP , SET HEADSEP OFF -- character used when defining a two-line column heading SET TRIMSPOOL ON -- trim trailing spaces from each line SET LINESIZE 32000 -- number of characters to be printed on one line SET WRAP OFF -- truncates lines longer than LINESIZE SET NUMWIDTH 5 -- default width while displaying numbers COLUMN tm new_value iso8601 noprint SELECT to_char(sysdate, 'YYYY-MM-DD') tm FROM dual; spool output_file_&iso8601..csv -- Append new data to spool file: "spool output_file_&iso8601..csv append" SELECT * FROM table_name spool OFF
感謝kevin分享了該過程,這對我非常有用。 我已自定義代碼:
我還分享了可能對他人有幫助的自定義代碼。 定制代碼可在此處下載。
FOR i IN t_describe.FIRST .. t_describe.LAST LOOP IF i <> t_describe.LAST THEN put('UTL_FILE.PUT(v_fh,'''||t_describe(i).col_name||'''||'''||v_delimiter||''');'); ELSE put(' UTL_FILE.PUT(v_fh,'''||t_describe(i).col_name||''');'); END IF; END LOOP; put(' UTL_FILE.NEW_LINE(v_fh);');
分隔符的定制代碼
如果我<> t_describe.LAST THEN
put('UTL_FILE.PUT(v_fh,“'|| t_describe(i).col_name ||'”(i)||''|| v_delimiter ||'');');;
其他
put('UTL_FILE.PUT(v_fh,“'|| t_describe(i).col_name ||'”(i));');
萬一;
調用該過程的正確方法是將變量與值綁定
data_dump(query_in =>'從對偶中選擇1',file_in =>'file.csv',directory_in =>'MY_DIR',delimiter_in =>'|');
謝謝
納文
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.