使用过程将表导出到csv文件(带时间戳的csv名称)

use*_*082 5 sql oracle stored-procedures

我想将一个表导出到每个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
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

(1)我不知道如何将csv文件输出到requried目录中,请问如何修复假脱机代码?

我应该使用线轴D:\path\filename.csv吗?

(2)在假脱机行中,如何使用时间戳now()更改csv文件的名称?

kev*_*sky 5

有几个步骤:

  • 使用`CREATE DIRECTORY my_dir' 创建一个目录为'C:\ dir';
  • 确保Oracle已读取,写入计算机上的文件夹(最好通过在Oracle安装文件夹中创建它来完成)
  • 授予用户执行该过程 GRANT read,write on DIRECTORY my_dir to the_user;
  • 下载并编译这里的方便程序

我用过这个,它的效果非常好.

用法

data_dump ( 'Select emp_name from emp',
             CURRENT_TIMESTAMP||'filename.csv',
             my_dir);
Run Code Online (Sandbox Code Playgroud)

(大大简化的样本!)

创建目录后,运行以下命令验证您的工作:

  • 从ALL_DIRECTORIES中选择*;
  • 你应该看到你的目录
  • 登录到数据库所在的计算机并验证文件夹路径是否存在,并且oracle用户对其具有权限.只有运行oracle服务的用户对该文件夹具有权限时,才能使用网络驱动器