[英]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.