Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Не хватает привилегий для использования DBMS_XMLSave.insertXML  [new]
Mikalai
Member

Откуда: Belarus
Сообщений: 81
Пытаюсь занести данные из XML в таблицу в следующей функции:

return number
as
insCtx DBMS_XMLSave.ctxType;
rows1 NUMBER;
xmlDoc1 CLOB;

BEGIN
xmlDoc1:='<?xml version="1.0"?><ROWSET><ROW num="1"><TEST1>asd5fgh</TEST1><TEST2>34</TEST2><TEST3>10.10.2006</TEST3><UDAL>1</UDAL></ROW></ROWSET>';
insCtx := DBMS_XMLSave.newContext('BASE.TEST');
-- DBMS_XMLSave.setDateFormat(insCtx, 'dd.mm.yyyy hh:ms:ss');
rows1 := DBMS_XMLSave.insertXML(insCtx, xmlDoc1);
DBMS_XMLSave.closeContext(insCtx);
END;

При исполнении выдает ошибку: ORA-29532: вызов Java прерван неизвестным исключением Java:
oracle.xml.sql.OracleXMLSQLException: ORA-01031:
ORA-06512: на "SYS.DBMS_XMLSAVE", line 65

и указывает на строку с DBMS_XMLSave.insertXML.

ORA-01031 - это нехватка привилегий. Работаю через пользователя SYSTEM - и выдает такую ошибку. Проблема не в формате даты в XML - пытался заносить данные в таблицу без поля формата Даты. Версия -Oracle9i Enterprise Edition Release 9.2.0.1.0

Не пойму, то ли что-то не установилось, то ли еще что - в чем проблема с привилегиями...
3 янв 07, 17:29    [3605088]     Ответить | Цитировать Сообщить модератору
 Re: Не хватает привилегий для использования DBMS_XMLSave.insertXML  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10051
Post exact code and error you are getting. Your function should look something like:

create or replace
function some_function
return number 
as
insCtx DBMS_XMLSave.ctxType;
rows1 NUMBER;
xmlDoc1 CLOB;

BEGIN
xmlDoc1:='<?xml version="1.0"?><ROWSET><ROW num="1"><TEST1>asd5fgh</TEST1><TEST2>34</TEST2><TEST3>10.10.2006</TEST3><UDAL>1</UDAL></ROW></ROWSET>';
insCtx := DBMS_XMLSave.newContext('BASE.TEST'); 
DBMS_XMLSave.setDateFormat(insCtx, 'dd.mm.yyyy');
rows1 := DBMS_XMLSave.insertXML(insCtx, xmlDoc1);
DBMS_XMLSave.closeContext(insCtx);
return rows1;
END;

If function owner is not user BASE, then function owner must be granted INSERT on BASE.TEST or INSERT ANY TABLE directly, not via role.

SY.

Сообщение было отредактировано: 3 янв 07, 17:55
3 янв 07, 17:53    [3605134]     Ответить | Цитировать Сообщить модератору
 Re: Не хватает привилегий для использования DBMS_XMLSave.insertXML  [new]
Mikalai
Member

Откуда: Belarus
Сообщений: 81
Спасибо! С привилегиями проблема разрешилась, стало ломаться на
oracle.xml.sql.OracleXMLSQLException: ORA-14552:
ORA-14552 cannot perform a DDL, commit or rollback inside a query or DML

Добавил перед BEGIN
pragma autonomous_transaction;
тогда заработало.

Спасибо за помощь!
3 янв 07, 18:25    [3605208]     Ответить | Цитировать Сообщить модератору
 Re: Не хватает привилегий для использования DBMS_XMLSave.insertXML  [new]
Mikalai
Member

Откуда: Belarus
Сообщений: 81
И еще маленькое дополнение.
Эту команду следует писать так:
DBMS_XMLSave.setDateFormat(insCtx, 'dd.MM.yyyy');

с большими буквами MM, иначе указанное число месяца будет записано в минуты, а месяц будет всегда - первый
5 янв 07, 13:49    [3608969]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить