2015-12-17 2 views
1

Это процедура PL/SQL, которую я пытаюсь запустить. Проблема, с которой я столкнулся с недопустимым каталогом. Я запускаю Oracle 11g На сервере Windows. У меня есть клиент, настроенный на другой машине, которая является Linux-машиной. Я попытался проверить файл init.ora, чтобы установить путь к каталогу, но похоже, что пакет futil не поддерживается в версии 11g Windows oracle версииDBMS_XSLPROCESSOR.CLOB2FILE - Ошибка Недопустимый путь к каталогу

Я импортирую один столбец из таблицы, где его XML_clob (XML, хранящийся в связке), тип столбца - это CLOB в этом случае и дамп в файл. Цените, если лучше процедура PL/SQL доступна для преобразования всего столбца в один файл и хранить в каталоге с помощью клиентской машины

Цените ответы для руководства к моей проблеме

UPDATE

CREATE or REPLACE PROCEDURE 
process_all_rows 
IS 
    TYPE clob_aat 
    IS TABLE OF minf100k300wclob%xml_clob 
     INDEX BY PLS_INTEGER; 
    l_XML clob_aat; 


BEGIN 
    select XMLElement(xml_clob).getClobVal() 
    BULK COLLECT INTO l_XML 
     FROM minf100k300wclob; 


FOR indx IN 1 .. L_XML.COUNT 
    LOOP 
     dbms_lob.append(L_XML, 'XML_EDI_FILES_1', 'file1.xml', nls_charset_id('AL32UTF8')); 
    END LOOP; 
END process_all_rows; 

Я не могу получить эту работу, как я получаю сообщение об ошибке, как показано ниже

ошибки для PROCEDURE PROCESS_ALL_ROWS:

LINE/COL ERROR 
-------- ----------------------------------------------------------------- 
4/4 PL/SQL: Item ignored 
5/33  PLS-00208: identifier 'XML_CLOB' is not a legal cursor attribute 
12/22 PLS-00382: expression is of wrong type 
18/7  PL/SQL: Statement ignored 
18/7  PLS-00306: wrong number or types of arguments in call to 'APPEND' 
SQL> 
enter code here 

ответ

1

1) Хорошо, чтобы использовать clob2file или большинство функций, которые полагаются на UTL_FILE, сначала вы должны создать directory object в базе данных оракула. Синтаксис:

CREATE DIRECTORY XML_EDI_FILES AS 'C:\path\on\your\server\'; 

Это добавляет указанный каталог на сервере, специальный оракула таблицы с указанным именем, в этом случае XML_EDI_FILES. Когда вы вызываете связанные с файлом процедуры позже, вы передадите это имя в качестве аргумента. См. docs для получения дополнительной информации. Конечно, процесс оракула на вашем сервере должен иметь права на запись в этот каталог.

2) Подождите, через клиент машина? Например, используйте катушку sqlplus. Грубый синтаксис

set long 4000; 
spool output_file.txt 
select xml_clob from minf100k300wc 

Хотя я могу почти гарантировать, что это не будет работать, как требуется в первую, так SQLPLUS, как правило, также выходные имена столбцов, вставка разрыва строки и т.д. Вы должны искать варианты SQLPLUS форматирования , Я бы, вероятно, поместил немного кода Java, Clobs красиво сопоставлены с строками IIRC.

3) Непонятно, что вы просите.

Ответ на обновленный вопрос:

... но я даже описал то, что вы должны были сделать в моем комментарии. Здесь вы найдете:

CREATE or REPLACE PROCEDURE process_all_rows IS 
    tmp_clob clob; 
    cursor cur_clob is 
    select XMLElement(xml_clob).getClobVal() val FROM minf100k300wclob; 
begin 
    dbms_lob.createtemporary(tmp_clob,true); 
    for c in cur_clob loop 
    dbms_lob.append(tmp_clob, c.val); 
    end loop; 
    dbms_xslprocessor.clob2file(tmp_clob, 'XML_EDI_FILES_1', 'file1.xml', nls_charset_id('AL32UTF8')); 
    dbms_lob.freetemporary(tmp_clob); 
end; 
+0

У меня проблема решена для первой проблемы, спасибо за это. однако я пытаюсь создать хранимую процедуру для использования массового сбора, чтобы помещать xml-файлы, хранящиеся в базе данных, в переменную, вы можете игнорировать третью проблему, поскольку я мог напрямую использовать WINSCP для передачи файла дампа, созданного на сервере базы данных Oracle. Я обновил свою хранимую процедуру в вопросе – user3764303

+0

У вас есть пара вопросов в новой процедуре. два слова 'procedure', некоторые дополнительные' # 'посередине,' TABLE of minfclob100k300w% clob' должно быть 'IS TABLE OF minfclob100k300w% xml_clob',' clob2file' - это процедура, которая не является функцией, поэтому ваша компиляция завершится неудачей на 'analy_compensation ', не говоря уже о том, что не ясно, что вы пытаетесь достичь этим.Кроме того, вам не требуется массовый сбор, если вы просто зацикливаетесь над ними, простой курсор будет делать. Что еще более важно, 'clob2file' будет всегда переписываться - вам нужно построить полный clob с' dbms_lob.append', а затем написать один раз. – Timekiller

+0

Я пытаюсь поместить столбец в файл дампа на сервере базы данных с помощью select xml_clob из в каталоге, указанном в XML_EDI_FILES, с файлом file1.xml. Не могли бы вы отредактировать код и поместить его, если сможете понять мою проблему, да, вы правы, я получаю ошибку компиляции с помощью файла clob2 даже после удаления analytse_compensation. – user3764303

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