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

标签 sql oracle stored-procedures

我想将一个表导出到每个 csv 文件并用时间戳命名该 csv 文件。例如,如果我有一张 table 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 文件输出到所需目录中,请问如何修复 spool 代码?

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

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

最佳答案

有几个步骤:

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

  • 我用过这个,效果很好。
    用法
    data_dump ( 'Select emp_name from emp',
                 CURRENT_TIMESTAMP||'filename.csv',
                 my_dir);
    
    (大大简化的示例!)
    创建目录后,通过运行以下命令验证您的工作:
  • 从 ALL_DIRECTORIES 中选择 *;
  • 您应该会看到您的目录
  • 登录数据库所在的机器,验证文件夹路径是否存在,并且oracle用户对其有权限。仅当运行 oracle 服务的用户对该文件夹具有权限时才可以使用网络驱动器
  • 关于sql - 使用过程将表导出到 csv 文件(带有时间戳的 csv 名称),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29399233/

    相关文章:

    sql - 当涉及到数据库列时,您是否更喜欢详细的命名?

    java - 小程序 Java 7 更新 21 : Cannot set AWTKeyListener on default Toolkit

    oracle - kthreaddi 进程导致 CPU 使用率过高

    sql - 如何将 2 行(即进入和退出日期)变成 1 行

    sql - 必须为存储过程声明标量变量错误

    stored-procedures - Snowflake使用不同的参数重新打开游标

    mysql - 连接和查询具有冲突列名的两个表

    sql - 如何找到两个值不同且其中一个可以为 NULL 的行?为什么 NULL != 1 是假的?

    mysql - SQL查询中如何使用 '?'

    mysql - 简单 Select 语句中的存储过程问题 Varchar 中的问题