Создайте хранимую (и автоматизированную) процедуру для внешних таблиц в Oracle

Во-первых, заранее спасибо за ответы.

Этот вопрос касается внешних таблиц и процедур.

У меня будет несколько файлов .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 во внешнюю таблицу?

Может есть способ попроще ...

Еще раз спасибо!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
645
1

Ответы 1

Создайте МАТЕРИАЛИЗАЦИЯ ВИД во внешней таблице и выполняйте полное обновление каждый раз, когда приходит новый файл.

Если есть схема именования файлов, так что имена файлов меняются, перед обновлением дополнительно выполните ИЗМЕНИТЬ ТАБЛИЦУ, чтобы скорректировать LOCATION имени (имен) файлов.

Например.

ALTER TABLE xxx
   LOCATION ('my_new_file');

С MATERIALIZE VIEW вам не нужна процедура для обновления данных, простой вызов

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

За сценой выполняется TRUNCATE, за которым следует INSERT APPEND из внешней таблицы.

Другие вопросы по теме