【问题标题】:Create an stored (and automated) procedure for External Tables in Oracle在 Oracle 中为外部表创建存储(和自动化)过程
【发布时间】:2018-07-30 23:15:51
【问题描述】:

首先,提前感谢您的回答。

这个问题是关于外部表和过程的。

我将一些 .csv 文件存储在一个目录中,我必须将所有这些数据添加到一个表中。

我的想法是:

  1. 将 csv 文件数据加载到外部表中

  2. 将外部表中的所有数据插入到最终表中

我已经创建了将数据从 csv 文件 加载到 外部表

的代码
    CREATE TABLE "INFO"."DEVICE_EXTERNAL"
    (
        "Serial Number" VARCHAR2(100),
        "Status" VARCHAR2(100),
        "Install Date" VARCHAR2(100)
        )
    ORGANIZATION EXTERNAL 
        ( TYPE ORACLE_LOADER
          DEFAULT DIRECTORY "ER_IN_FILES"
          ACCESS PARAMETERS
          (   RECORDS DELIMITED BY newline 
              SKIP 1 
              FIELDS TERMINATED BY '|' 
              optionally enclosed BY '"' 
              MISSING FIELD VALUES ARE NULL
              (
                "Serial Number" char,
                "Status" char,
                "Install Date" char  
                 ) 
          )
          LOCATION
           ( "INFO":'device_data_week3.csv'   ---csv file
           )
        );

并制定了一个将数据从外部表加载到最终表的过程,我是否还包括数据移动的实际日期时间。

     Procedure Move_External_Final AS 
        v_upload_date DATE := SYSDATE;
        v_company varchar(1) := '1';  
      BEGIN
       BEGIN

        INSERT INTO SMART_MAP
          (DATA_DATE,
           COMPANY,
           "Serial Number",
           "Status",
           "Install Date"
           )
           SELECT 
            v_upload_date,
            v_company,
            "Serial Number",
            "Status", 
            to_date("Install Date")

        from DEVICE_EXTERNAL    ;  

       COMMIT;

         EXCEPTION
          WHEN no_data_found
            THEN 
            dbms_output.put_line ( 'EXC FAIL INSERT');
       END ;  
      END Move_External_Final;

我们的目标是让一切自动化。因此我想创建一个允许外部表从csv 文件 收集数据的过程,然后将这些数据移动到最终表

注意csv 文件每周都会不同。因此,在收集新数据之前,必须删除外部表旧内容

我的问题是:是否可以创建一个过程来删除以前的内容并将数据从 csv 文件收集到外部表?

也许有更简单的方法...

再次感谢您!

【问题讨论】:

    标签: oracle csv datatables oracle-sqldeveloper external


    【解决方案1】:

    在您的外部表上创建MATERIALIZE VIEW,并在每次新文件到达时执行完全刷新。

    如果有一些文件命名架构,导致文件名发生变化,请在刷新之前另外执行ALTER TABLE 以调整文件名位置。

    例如

    ALTER TABLE xxx
       LOCATION ('my_new_file');
    

    使用 MATERIALIZE VIEW,您不需要任何程序来刷新数据,只需调用

      dbms_mview.refresh('my_materialzed_view','C');
    

    在后台执行 TRUNCATE,然后执行来自外部表的 INSERT APPEND。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 2012-03-07
      • 2012-09-04
      相关资源
      最近更新 更多