【问题标题】:Oracle - PL/SQL: How to read from changeable file names in external tables?Oracle - PL/SQL:如何从外部表中的可变文件名中读取?
【发布时间】:2012-12-19 16:18:02
【问题描述】:

我需要帮助。我想使用名称中包含 sysdate 的 PL/SQL 创建一个表?比如table_name_sysdate?

我正在尝试创建一个外部表,该表将从 .csv 文件和我要读取的文件名中读取,其名称由常量 (table_name) 和日期 (sysdate) 组成。该文件名可以根据日期每天更改。我不知道如何创建从每日可更改的文件名加载的机制。

这是我的代码,我不知道在带问号的括号内放什么。

create table ext_table_1
(med_name varchar2(20),
cost integer)
organization external
(type ORACLE_LOADER 
default directory orders
access parameters
(records delimited by newline
fields terminated by ',')
location (???)
reject limit 200;

【问题讨论】:

    标签: oracle plsql external-tables


    【解决方案1】:

    文件在表的 LOCATION 属性中指定。您可以使用alter table 语句更改它,如下所示:

     alter table log_files location ('prefix_20121219.csv');
    

    因此,基本上,使用今天的文件创建表,然后在计划的作业或类似操作中每天运行 ALTER TABLE 语句。

    或者,您可以保持文件名不变,并将每天的文件重命名/复制为该名称。如果您在 11gR2 上运行,您可以关联一个预处理器文件 - 一个 shell 脚本 - 以便在您查询外部表时执行此操作。 Find out more.

    【讨论】:

      【解决方案2】:

      这是对目录对象的引用,使用“创建目录”创建。

      http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_5007.htm

      【讨论】:

      • 我知道该放什么,但文件名可以根据当前日期更改。我不知道如何让它自动读取名为以下(file_DD_MM_YY)的文件
      • 好的,我明白了。您可以每天发出“alter table”命令来修改要读取的文件名,因为文件名是基于系统日期确定的
      • 一定有办法自动完成。无论如何,感谢您尝试帮助我。非常感激。上帝保佑你。
      • 你可以通过 DBMS_Scheduler 自动化它
      • 另一种选择是使用预处理器,这是一个在读取文件之前运行的 unix 脚本。因此,如果您可以编写 unix 脚本来找到正确的文件,那么这就是适合您的技术。
      【解决方案3】:

      基本上你想要的是从外部 CSV 文件加载到一个表中,并且文件名包含一个时间戳,所以它的名称每次都会改变。 外部脚本可以简单地将该文件(从文件名中提取时间戳并检查它是否以正确的格式匹配今天)复制到加载脚本所期望的标准名称。如果您以后需要原始文件,在覆盖之前,请先将文件复制到备份目录中。

      【讨论】:

        猜你喜欢
        • 2020-10-11
        • 2010-09-18
        • 1970-01-01
        • 1970-01-01
        • 2018-04-04
        • 2017-05-29
        • 1970-01-01
        • 2011-04-12
        • 1970-01-01
        相关资源
        最近更新 更多