У меня есть требование для чтения данных из XML-файла и загрузки в таблицу Oracle. У меня есть описанная ниже процедура, и у меня есть исключение
ORA-06502: PL/SQL: numeric or value error: invalid LOB locator specified: ORA-22275
ORA-06512: at "SYS.DBMS_LOB", line 1014
ORA-06512: at "AAA.INSERT_XML_EMPS", line 14
ORA-06512: at line 10
Process exited.
Disconnecting from the database
У меня есть каталог на диске C. Вот так, C: / XMLSTORE. он содержит файлы XML, которые я хотел бы загрузить в таблицу Oracle. Этот каталог имеет полные права. Проверили, что права доступа к каталогам в Oracle имеют разрешения READ, WRITE, EXECUTE.
SELECT *
FROM all_tab_privs
WHERE table_name = 'XMLSTORE1';
I tried using "dbms_lob.createtemporary()" as well. Can anyone please let me know what am i doing wrong here..
PROCEDURE Has an exception:
create or replace PROCEDURE insert_xml_emps
(p_directory in varchar2,p_filename in varchar2, vtableName in varchar2) as
v_filelocator BFILE;
v_cloblocator CLOB;
l_ctx DBMS_XMLSTORE.CTXTYPE;
l_rows NUMBER;
v_amount_to_load NUMBER;
dest_offset NUMBER := 1;
src_offset NUMBER := 1;
lang_context NUMBER := DBMS_LOB.DEFAULT_LANG_CTX;
warning NUMBER;
BEGIN
dbms_lob.createtemporary(v_cloblocator, true);
v_filelocator := bfilename(p_directory, p_filename);
dbms_lob.open(v_filelocator, dbms_lob.file_readonly);
v_amount_to_load := DBMS_LOB.getlength(v_filelocator);
DBMS_LOB.LOADCLOBFROMFILE(v_cloblocator,
v_filelocator,
v_amount_to_load,
dest_offset,
src_offset,
0,
lang_context,
warning);
l_ctx := DBMS_XMLSTORE.newContext(vTableName);
DBMS_XMLSTORE.setRowTag(l_ctx, 'ROWSET');
DBMS_XMLSTORE.setRowTag(l_ctx, 'IBSCOLYTD');
-- clear the update settings
DBMS_XMLStore.clearUpdateColumnList(l_ctx);
-- set the columns to be updated as a list of values
DBMS_XMLStore.setUpdateColumn(l_ctx, 'ACTNOI');
DBMS_XMLStore.setUpdateColumn(l_ctx, 'MEMONOI');
DBMS_XMLStore.setUpdatecolumn(l_ctx, 'MEMODTEI');
DBMS_XMLStore.setUpdatecolumn(l_ctx, 'AMOUNTI');
DBMS_XMLStore.setUpdatecolumn(l_ctx, 'BRCDSI');
DBMS_XMLStore.setUpdatecolumn(l_ctx, 'TYPEI');
DBMS_XMLStore.setUpdatecolumn(l_ctx, 'TRANSMONI');
-- Now insert the doc.
l_rows := DBMS_XMLSTORE.insertxml(l_ctx, v_cloblocator);
DBMS_XMLSTORE.closeContext(l_ctx);
dbms_output.put_line(l_rows || ' rows inserted...');
dbms_lob.close(v_filelocator);
DBMS_LOB.FREETEMPORARY(v_cloblocator);
END;