Во-первых, заранее спасибо за ответы.
Этот вопрос касается внешних таблиц и процедур.
У меня будет несколько файлов .csv, хранящихся в каталоге, и я должен добавить все эти данные, хранящиеся в таблице.
Моя идея:
Загрузка данных файла CSV во внешнюю таблицу
Вставить все данные из внешней таблицы в итоговую таблицу
Я уже создал код для загрузки данных из 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 во внешнюю таблицу?
Может есть способ попроще ...
Еще раз спасибо!
Создайте МАТЕРИАЛИЗАЦИЯ ВИД во внешней таблице и выполняйте полное обновление каждый раз, когда приходит новый файл.
Если есть схема именования файлов, так что имена файлов меняются, перед обновлением дополнительно выполните ИЗМЕНИТЬ ТАБЛИЦУ, чтобы скорректировать LOCATION имени (имен) файлов.
Например.
ALTER TABLE xxx
LOCATION ('my_new_file');
С MATERIALIZE VIEW вам не нужна процедура для обновления данных, простой вызов
dbms_mview.refresh('my_materialzed_view','C');
За сценой выполняется TRUNCATE, за которым следует INSERT APPEND из внешней таблицы.