2016-01-25 2 views
-3

У меня есть большой (1 Mb +) XML-файл, который хранится в локальной папке (например: c: \ temp \ data.xml), который должен быть загружен внутри переменной XMLTYPEКак загрузить XMLTYPE из файла?

Как это сделать?

ответ

1

ограничение размера поля Oracle XMLTYPE должно быть 4 ГБ, поэтому вы не столкнетесь с проблемами при загрузке файлов размером 1 МБ. Вы должны создать на каталог Oracle (на сервере баз данных), поместите в созданную директорию файл XML, а затем выполнить вашу вставку следующим образом:

[email protected]>mkdir yourdirectory 
[email protected]>chown youroracleaccount.youroraclegroup yourdirectory 
SQL> CREATE OR REPLACE DIRECTORY XMLDIR AS 'YOURDESIREDPATH' 
SQL> GRANT read, write ON DIRECTORY XMLDIR TO <DESIREDORACLESCHEMA> 
SQL> INSERT INTO YOURTABLE VALUES (...., XMLType(bfilename('XMLDIR', 'yourfilename.xml') , nls_charset_id('YOURCHARSETID'))); 
SQL> commit; 

Если вы хотите разместить XML в переменной, должен создать внешнюю таблицу, например, в последующем (но вы можете изменить этот образец, как вы нужду):

CREATE TABLE YOURXMLTABLE (doc CLOB) 
ORGANIZATION EXTERNAL 
(
TYPE ORACLE_LOADER 
DEFAULT DIRECTORY xmlfile_dir 
ACCESS PARAMETERS 
(
FIELDS (lobfn CHAR TERMINATED BY ',') 
COLUMN TRANSFORMS (doc FROM lobfile (lobfn)) 
) 
LOCATION ('yourfilename.xml') 
) 
REJECT LIMIT UNLIMITED; 

, а затем выполнить

select * into XMLTYPVARIABLE from XMLTABLE 

Regard s Giova

+0

Я попытался выполнить код, который вы предоставили с созданием таблицы внутри разработчика pl/sql - он имеет некоторые синтаксические ошибки. – user149691

+1

Каталог должен находиться на сервере БД и читать/записывать с помощью учетной записи операционной системы Oracle. Он не может быть на клиентской машине, если это то, что OP означает «локальная папка». И 'XMLTABLE' - это имя функции, поэтому используйте это, поскольку имя вашей внешней таблицы будет в лучшем случае запутывать, если оно вообще работает. –

Смежные вопросы