Независимо от того, в какой среде ОС вы работаете, вы всегда можете использовать ORACLE_LOADER
драйвер доступа, используя Внешние таблицы .
Из документов Oracle Выбор внешних таблиц по сравнению с SQL * Loader
Синтаксический анализ записей внешних таблиц и SQL * Loader очень похож, поэтому, как правило, нет большой разницы в производительностидля того же формата записи.
Все, что вам нужно, это чтение / запись в объекте каталога.Хорошо, если вы можете создать один (CREATE DIRECTORY YOUR_DIR AS '<directory_path>'
) или попросить других суперпользователей предоставить соответствующие гранты (GRANT READ ON DIRECTORY YOUR_DIR TO yourschema
).
Внешнюю таблицу можно создать динамически, используя EXECUTE IMMEDIATE
DECLARE
l_exists INT;
BEGIN
SELECT CASE
WHEN EXISTS ( SELECT 1
FROM yourmaintable
WHERE ROWNUM = 1
) THEN 1
ELSE 0 END
into l_exists from dual;
IF l_exists : = 0 THEN --If the Table is empty
EXECUTE IMMEDIATE q'{ CREATE TABLE your_ext_table -- Using the alternate
-- quoting mechanism
(col1 INT,
col2 VARCHAR2(20)
col3 DATE)
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER -- Use the ORACLE_LOADER driver to load your file.
DEFAULT DIRECTORY YOUR_DIR
ACCESS PARAMETERS
(RECORDS DELIMITED BY NEWLINE
FIELDS (col1 CHAR(2),
col2 VARCHAR2(20),
col3 VARCHAR2(20) date_format DATE mask "mm/dd/yyyy"
)
)
LOCATION ('yourfile.csv')
)}'
;
EXECUTE IMMEDIATE 'INSERT INTO yourmaintable (col1,col2,col3) --dynamic Insert
select * FROM your_ext_table';
END IF;
END;
/