我想将一个表导出到每个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文件输出到requried目录中,请问如何修复假脱机代码?
我应该使用假脱机D:\path\filename.csv
吗?
(2)在假脱机行中,如何使用时间戳now()来更改csv文件的名称?
答案 0 :(得分:5)
有几个步骤:
GRANT read,write on DIRECTORY my_dir to the_user;
我已经使用了它并且效果非常好。
用法
data_dump ( 'Select emp_name from emp',
CURRENT_TIMESTAMP||'filename.csv',
my_dir);
(大大简化的样本!)
创建目录后,运行以下命令验证您的工作:
答案 1 :(得分:0)
感谢kevin分享该过程,对我来说非常有用。我已自定义代码:
我还分享了可能对他人有帮助的自定义代码。可以下载here自定义代码。
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 ||'');');
ELSE
put('UTL_FILE.PUT(v_fh,“'|| t_describe(i).col_name ||'”(i));');
END IF;
调用过程的正确方法是将变量与值绑定
data_dump(query_in =>'从double中选择1',file_in =>'file.csv',directory_in =>'MY_DIR',delimiter_in =>'|');
谢谢
Naveen
答案 2 :(得分:0)
假脱机文件将与.sql文件创建在同一目录中
def change():
root.children[str(s.get())].configure(text="Changed")