powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Парсинг XML, проблема
25 сообщений из 69, страница 2 из 3
Парсинг XML, проблема
    #39498298
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каким образом ты получаешь свой XML? Загружаешь из файла, получаешь в рез-те http-запроса или как-то еще?
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498299
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Азагаш,

XMLTYPE constructor
constructor function XMLType(
xmlData IN clob,
...
REPLACE
Both search_string and replacement_string, as well as char, can be any of the data types CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, or NCLOB.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498325
Азагаш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,
оказалось, что попадает он ко мне через varchar2(32000) из utl_http.read_text, спасибо

env,
каюсь, написал не попробовав, спасибо
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498332
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Азагашоказалось, что попадает он ко мне через varchar2(32000) из utl_http.read_textRead_raw-то небось понадежнее будет. Кодировку потом параметризировать можно.

Ну так что, проблема решилась?
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498345
Азагаш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadRead_raw-то небось понадежнее будет. Кодировку потом параметризировать можно.
Ну так что, проблема решилась?
пока не особо. если разквочивать влоб - получаю "ORA-19011: Недостаточный размер буфера символьных строк"
сам конверт режу при получении, т.к. он постоянной длины. не то чтобы шибко универсально, но мне этого и не нужно.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498350
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Азагашпока не особо. если разквочивать влоб - получаю "ORA-19011: Недостаточный размер буфера символьных строк"Так ты до работы с XML еще и не добрался. Читай в доке по utl_http примеры получения данных. И юзай read_raw для последующей записи в blob, а не read_text + clob.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498375
Азагаш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,
а что потом делать с блобом? реплейсом расквочивать и потом все это скармливать XMLType?
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498379
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В виде того селекта все работает отлично. Но если прописать через Declare или в процедуру разбивается об ошибку

Код: plsql
1.
2.
3.
4.
ORA-19112: error raised during evaluation:  
ORA-06550: line 1, column 13:
PLS-00201: identifier 'SYS.DBMS_XQUERYINT' must be declared
ORA-06550: line 1, column 7:



Оракл 10 версии, JVM не установлен. Можно ли как-то обойти, или нужно ставить?

Вот пример

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
declare 
        otvet             clob;
        otvet_s           XMLTYPE;
        zapros clob;
        begin
        zapros:='<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Header/>
  <S:Body>
    <ns4:exportPaymentDocumentDetails xmlns:ns2="http://www.w3.org/2004/08/xop/include" xmlns:ns3="http://smev.gosuslugi.ru/rev120315" xmlns:ns4="http://front.export.gis.smev.someurl.ru/" xmlns:ns5="http://ru.someurl.smev.gis/dict">
      <ns3:PaymentDocumentDetailsRequest>
        <ns3:UnifiedAccountNumber>11AA223344</ns3:UnifiedAccountNumber>
      </ns3:PaymentDocumentDetailsRequest>
		</ns4:exportPaymentDocumentDetails>
	</S:Body>
</S:Envelope> 
';
     otvet      :=  PAY_test(zapros);
     otvet_s:=XMLTYPE(otvet);
begin
for c in(
with t as (select otvet_s from dual)
select *
 from t, xmltable(xmlnamespaces('http://schemas.xmlsoap.org/soap/envelope/' as "S", 'http://smev.gosuslugi.ru/rev120315' as "ns2", 'http://front.export.gis.smev.someurl.ru/' as "ns3"
,'http://www.w3.org/2004/08/xop/include' as "ns4", 'http://ru.someurl.smev.gis/dict' as "ns5"),
'for $i in S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails
              return $i/ns2:PaymentDocument' passing otvet_s 
             columns 
                 UnifiedAccountNumber varchar2(250) path 'ns2:UnifiedAccountNumber'
))
loop
insert into XTEST (id_1, id_2, ID) values ('2','2',c.unifiedaccountnumber);

 commit;
 end loop;
return;
end;
end;
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498422
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АзагашAmKad,
а что потом делать с блобом? реплейсом расквочивать и потом все это скармливать XMLType?Сначала изучить содержимое блоба. Что там вообще приходит в ответе. И потом уже принимать решение о том, что делать дальше.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498436
Азагаш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

внутри soap-конверта

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
 <soap:Body>
  <m:mon xmlns:m="http://aaa.com">
   <m:return xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

   </m:return>
  </m:mon>
 </soap:Body>
</soap:Envelope>



лежит xml

Код: xml
1.
2.
3.
4.
5.
6.
<?xml version="1.0"?>
<test xmlns="http://aaa.ru" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<inner>
text
</inner>
</test>



у которого все "<" изменены на "& lt ;", все ">" - на "& gt ;", и все " " " - на "& quot ;"
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498441
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
column x format a30

with s as
(select xmlelement("x", '>') x
 from dual
)
select *
from s,
xmltable
('/x'
passing s.x
columns
x varchar2(100) path '.'
);

X                              X
------------------------------ ------------------------------
<x>&gt;</x>                    >

Затрач.время: 00:00:00.01
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498445
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Ответ точно корректный получается в анонимном блоке?
И попробуй в запросе прибить гвоздями /*+ NO_XML_QUERY_REWRITE */
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498453
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Ответ точно нормальный. Даже если опустить функцию и просто вбить туда ответ - ситуация та же.
/*+ NO_XML_QUERY_REWRITE */ ситуацию не изменил 8(
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498464
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты ответ к xmltype-типу привести пробовал? Читай сигнатуру конструктора xmltype с blob-ом. Потом возьми от него xmltable.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498491
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
for c in(
select UnifiedAccountNumber
 from xmltable(xmlnamespaces('http://schemas.xmlsoap.org/soap/envelope/' as "S", 'http://smev.gosuslugi.ru/rev120315' as "ns2", 'http://front.export.gis.smev.someurl.ru/' as "ns3"
,'http://www.w3.org/2004/08/xop/include' as "ns4", 'http://ru.someurl.smev.gis/dict' as "ns5"),
'for $i in S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails
              return $i/ns2:PaymentDocument' passing otvet_s 
             columns 
                 UnifiedAccountNumber varchar2(250) path 'ns2:UnifiedAccountNumber'
))
loop
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498743
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

А вот так отлично работает) Спасибо)) А почему так происходит?
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39498772
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Из-за этого
Код: plsql
1.
2.
select *
  from t, ..


Дальше думай сам.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39499719
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мммммм, у меня снова проблема
После парсинга функция вставляет в таблицу только одну запись, хотя по идее их должно быть несколько. Есть делать парсинг просто селектом, выводит несколько значений, все нормально. Не могу разобраться

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
CREATE OR REPLACE FUNCTION
(
       req_id       in    number,
       outp         in    clob
        )
        return varchar2 is inp VARCHAR2(4000);
        zapros          clob;
        otvet             clob;
        otvet_s           XMLTYPE;
        PaymentDocumentID VARCHAR2(4000);
        UnifiedAccountNumber VARCHAR2(4000);
        AccountNumber varchar2(4000);
        req number(16);
        req1 number (16);
surname VARCHAR2(4000);
req_id_new           NUMBER(16);
        begin
          select sequence_1.NEXTVAL into req_id_new from dual;
          select sequence_1.NEXTVAL into req from dual;
          select sequence_1.NEXTVAL into req1 from dual;
     zapros     :=     outp;
     
     insert into gis_reqstest values (req_id_new,zapros, null);
     commit;
     otvet      :=  PAY_test(zapros);
     otvet_s:=XMLTYPE(otvet);
     
     update usb_gis_reqstest q
     set q.outp = XMLTYPE(otvet)
     where q.type = req_id_new;
     commit;
     
  
     for c in (select PaymentDocumentID, UnifiedAccountNumber, AccountNumber
 from  xmltable(xmlnamespaces('http://schemas.xmlsoap.org/soap/envelope/' as "S", 'http://smev.gosuslugi.ru/rev120315' as "ns2", 'http://front.export.gis.smev.someurl.ru/' as "ns3"
,'http://www.w3.org/2004/08/xop/include' as "ns4", 'http://ru.someurl.smev.gis/dict' as "ns5"),
'for $i in S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails
              return $i/ns2:PaymentDocumentID' passing otvet_s 
             columns 
                 PaymentDocumentID varchar2(250) path 'ns2:PaymentDocumentID',
                 UnifiedAccountNumber varchar2(250) path 'ns2:UnifiedAccountNumber',
                 AccountNumber varchar2(250) path 'ns2:AccountNumber')) loop
     
insert into GIS_INFO (id_rec,Id_Req,ID_RECORD,PAYMENTDOCUMENTID,UNIFIEDACCOUNTNumber,ACCOUNTNUMBER)  values 
(req_id_new,req,req1,c.PaymentDocumentID,c.UnifiedAccountNumber,c.AccountNumber);

 commit;
 end loop;
end



Сам XML

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body><ns3:exportPaymentDocumentDetailsResponse xmlns:ns2="http://smev.gosuslugi.ru/rev120315" 
xmlns:ns3="http://front.export.gis.smev.someurl.ru/" xmlns:ns4="http://www.w3.org/2004/08/xop/include" 
xmlns:ns5="http://ru.someurl.smev.gis/dict">
<ns2:ExportPaymentDocumentDetails>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7072</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>111AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
<ns2:PaymentDocument>
<ns2:PaymentDocumentID>11AA223344-01-7066</ns2:PaymentDocumentID>
<ns2:UnifiedAccountNumber>11AA223344</ns2:UnifiedAccountNumber>
<ns2:AccountNumber>11AA223344</ns2:AccountNumber>
<ns2:MCServiceID>11AA223344-01</ns2:MCServiceID>
</ns2:PaymentDocument>
</ns2:ExportPaymentDocumentDetails>
</ns3:exportPaymentDocumentDetailsResponse>
</S:Body>
</S:Envelope>



Тэгов <ns2:PaymentDocument> может быть произвольное количество
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39499742
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Зачем тебе commit на каждую строчку?

И в целом, зачем тут цикл? insert .. select .. напрашивается.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500061
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Это про коммит из цикла? Если его вынести за цикл вообще ж ничего не вставляет
При попытке сделать insert ... select пишет ошибку ora-00947 not enough values. Хотя валуев-то вроде достаточно.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
insert into USB_GISZHKH_INFO_4701 (id_rec,Id_Req,ID_RECORD,PAYMENTDOCUMENTID,UNIFIEDACCOUNTNUMBER,ACCOUNTNUMBER) values

 (req_id_new,req,req1,
(select PaymentDocumentID, UnifiedAccountNumber, AccountNumber
 from  xmltable(xmlnamespaces('http://schemas.xmlsoap.org/soap/envelope/' as "S", 'http://smev.gosuslugi.ru/rev120315' as "ns2", 'http://front.export.gis.smev.someurl.ru/' as "ns3"
,'http://www.w3.org/2004/08/xop/include' as "ns4", 'http://ru.someurl.smev.gis/dict' as "ns5"),
'for $i in S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails
              return $i/ns2:PaymentDocumentID' passing otvet_s 
             columns 
                 PaymentDocumentID varchar2(250) path 'ns2:PaymentDocumentID',
                 UnifiedAccountNumber varchar2(250) path 'ns2:UnifiedAccountNumber',
                 AccountNumber varchar2(250) path 'ns2:AccountNumber')));
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500084
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Эм... Как бы так вежливо-то сказать, что такого говнокода на ровном месте давно не видал, разве что у некоего RДошкольника....

Код: plsql
1.
2.
3.
values
 (req_id_new,req,req1,
(select PaymentDocumentID, UnifiedAccountNumber, AccountNumber


Сам понял, что написал? Сколько полей в values составляет твоё (select ...


Я говорю про
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
insert into insert into USB_GISZHKH_INFO_4701 (id_rec,Id_Req,ID_RECORD,PAYMENTDOCUMENTID,UNIFIEDACCOUNTNUMBER,ACCOUNTNUMBER) 
select req_id_new as id_rec, req as id_req, req1 as id_record, t.PaymentDocumentID, t.UnifiedAccountNumber, t.AccountNumber
from 
(select PaymentDocumentID, UnifiedAccountNumber, AccountNumber
 from  xmltable(xmlnamespaces('http://schemas.xmlsoap.org/soap/envelope/' as "S", 'http://smev.gosuslugi.ru/rev120315' as "ns2", 'http://front.export.gis.smev.someurl.ru/' as "ns3"
,'http://www.w3.org/2004/08/xop/include' as "ns4", 'http://ru.someurl.smev.gis/dict' as "ns5"),
'for $i in S:Envelope/S:Body/ns3:exportPaymentDocumentDetailsResponse/ns2:ExportPaymentDocumentDetails
              return $i/ns2:PaymentDocumentID' passing otvet_s 
             columns 
                 PaymentDocumentID varchar2(250) path 'ns2:PaymentDocumentID',
                 UnifiedAccountNumber varchar2(250) path 'ns2:UnifiedAccountNumber',
                 AccountNumber varchar2(250) path 'ns2:AccountNumber')
) t


И возьми себе за правило давать переменным префиксы, позволяющие однозначно отделять их от потенциальных совпадающих полей таблиц в запросах. И алиасы, помни про алиасы.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500098
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Спасибо, так все норм компилируется. Алиасы обычно не используя, да, вероятно, стоит.

Но вот только с таким вариантом кода в таблицу вообще ничего не вставляется 8(
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500103
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,

Значит, внутри процедуры не тот же xml, на котором отлаживаешь запрос.

Добавь промежуточную отладку, посмотри, что у тебя на самом деле в otvet_s и т.д.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500119
jukka413
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

otvet_s тоже пишется в промежуточную таблицу, он не менялся. Если вернуться на вариант с циклом - так же одна запись вставляется в таблицу.
...
Рейтинг: 0 / 0
Парсинг XML, проблема
    #39500151
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jukka413,
СтаниславскийНе верю!

выведи в dbms_output значение otvet_s на входе в цикл и продемонстрируй в виде листинга в sqlplus
...
Рейтинг: 0 / 0
25 сообщений из 69, страница 2 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Парсинг XML, проблема
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]