Electroflower Shiningemerald 384 / 117 / 22 Регистрация: 05.01.2012 Сообщений: 951 |
||||
1 |
||||
07.02.2019, 12:40. Показов 7895. Ответов 10 Метки нет (Все метки)
Добрый день, ребят!
0 |
Anvano 340 / 236 / 113 Регистрация: 12.05.2016 Сообщений: 642 |
||||
07.02.2019, 14:11 |
2 |
|||
патамушта используете неймспейс , а он не описан у вас
1 |
Shiningemerald 384 / 117 / 22 Регистрация: 05.01.2012 Сообщений: 951 |
|
07.02.2019, 14:37 [ТС] |
3 |
Anvano, неймспейсы у соапа были прописаны, почему-то сюда не вставились…
0 |
orion2014 93 / 71 / 33 Регистрация: 02.08.2015 Сообщений: 202 |
||||
07.02.2019, 17:11 |
4 |
|||
Здравствуйте!
1 |
Electroflower Shiningemerald 384 / 117 / 22 Регистрация: 05.01.2012 Сообщений: 951 |
||||
07.02.2019, 17:22 [ТС] |
5 |
|||
Ребят, если кто знает как разобрать используя другие способы, то прошу помощи
0 |
Anvano 340 / 236 / 113 Регистрация: 12.05.2016 Сообщений: 642 |
||||
07.02.2019, 22:20 |
6 |
|||
Сообщение было отмечено Electroflower как решение Решение
Ваш вариант тоже не работает Версия Оракла какая? С этого, в принципе, надо было начать вообще. Только что еще раз проверил свой вариант — всё прекрасно работает. Непонятно, зачем городить огород из DBMS_XMLGEN если и обычный XMLTYPE прекрасно работает.
Выводит: id_req=35464962 Т.е. всё прекрасно вытаскивается и работает.
1 |
Shiningemerald 384 / 117 / 22 Регистрация: 05.01.2012 Сообщений: 951 |
|
08.02.2019, 09:19 [ТС] |
7 |
Anvano, orion2014, спасибо вам, все работает, это просто моя невнимательность…
0 |
Electroflower Shiningemerald 384 / 117 / 22 Регистрация: 05.01.2012 Сообщений: 951 |
||||
11.02.2019, 09:37 [ТС] |
8 |
|||
orion2014, Anvano, а еще такой вопрос хочется задать, может вы знаете
а если туда поместить большой CLOB, почему-то вылетает в исключение..
0 |
Anvano 340 / 236 / 113 Регистрация: 12.05.2016 Сообщений: 642 |
||||
11.02.2019, 21:52 |
9 |
|||
А что хоть за исключение? Вообще с большими clob обычно проблем нет, но есть ограничение у оракла не больше 64 килобайт на одну ноду в XML. Поэтому если у вас XML вида
и этих самых строк больше чем на 64 кб — то надо разбивать на куски, одним махом не получится засосать это в XMLTYPE Хотя в какой-то из 11 версий вроде повысили лимит до 2 Гб
1 |
Shiningemerald 384 / 117 / 22 Регистрация: 05.01.2012 Сообщений: 951 |
|
12.02.2019, 09:05 [ТС] |
10 |
Anvano, видимо, дело вот в этом: XML Identifier Length Limit – Oracle XML DB supports only XML identifiers that are 4000 characters long
0 |
340 / 236 / 113 Регистрация: 12.05.2016 Сообщений: 642 |
|
13.02.2019, 01:42 |
11 |
XML Identifier это не общая длина XML документа, а фактически «название одного тега» , т.е. название тега не может быть больше 4000 символов. У вас прям теги называются по 200000 символов? Вряд-ли вы получили именно эту ошибку, либо XML совсем некорректный сформировали.
1 |
I am trying to use new APEX JSON APIs in my code and when I try to generate JSON with large data and nesting, I am getting error as stated in my question. I have tried following code
SET SERVEROUTPUT ON
DECLARE
l_cursor SYS_REFCURSOR;
BEGIN
OPEN l_cursor FOR
SELECT K.KB_ID "KB_ID",
K.TITLE "TITLE",
K.CONTENT "CONTENT",
K.KEYWORDS "KEYWORDS",
CURSOR(SELECT F.FILE_ID AS "FILE_ID",
F.FILE_NAME AS "FILE_NAME",
F.FILE_URL AS "FILE_URL"
FROM MY_FILES F
WHERE F.TYPE_PK = K.KB_ID AND F.TYPE='ITV_KB') AS "Files"
FROM ITV_KB_ML_V K
WHERE K.ENABLED = 1;
APEX_JSON.initialize_clob_output;
APEX_JSON.open_object;
APEX_JSON.write('KNOWLEDGE_DATA', l_cursor);
APEX_JSON.close_object;
DBMS_OUTPUT.put_line(APEX_JSON.get_clob_output);
APEX_JSON.free_output;
END;
I am getting error at APEX_JSON.write('KNOWLEDGE_DATA',l_cursor)
and my CONTENT column has large data, if I comment CONTENT then it works fine. Please suggest what I can use to generate JSON with large data in ORACLE APEX.
Надо обернуть всю логику по разбору XML в функцию, которая обработает исключения и запишет полную информацию об ошибках, например, в таблицу. Как-то так:
create table parseErrors (guid raw (16), errm varchar2 (4000), created timestamp);
create or replace function myXmlParser (docGuid raw, doc clob) return varchar2 is
procedure saveParseError (guid raw, errm varchar2) is
pragma autonomous_transaction;
begin
insert into parseErrors values (guid, errm, systimestamp);
commit;
end ;
begin
-- **здесь необходимая логика, в которой может возникнуть ошибка**
return xmlType (doc).getStringVal ();
exception when others then
saveParseError (docGuid, sqlerrm||chr(10)||sys.dbms_utility.format_error_backtrace());
return 'errorneous';
end myXmlParser;
/
Выборка для теста (вместо sys_guid() должна быть колонка с GUID из запроса):
select myXmlParser (sys_guid(), '<row>some data</row>') from dual union all
select myXmlParser (sys_guid(), '</row>illegal XML syntax</row>') from dual
;
выведет:
RESULT
------------------------
<row>some data</row>
errorneous
Kакие были ошибки:
set lines 999
col errm for a40 wrapp
select * from parseErrors;
GUID ERRM CREATED
-------------------------------- ---------------------------------------- -----------------------------
7106268B980F02D3E0530A01A8C04FBB ORA-31011: XML parsing failed 2018-07-15 12:32:41,204757000
ORA-06512: at "SYS.XMLTYPE", line 272
ORA-06512: at "DB.MYXMLPARSER", line 10
PS В вопросе мало информации по локализации причины ошибки, но думаю ссылки на похожие топики тут и тут будут полезны.
Пожалуйста, мне нужна помощь в извлечении данных из сложного XML в строки в оракуле. я попробовал извлечь значение, но он дает ошибку:
Ошибка синтаксического анализа xml ora-31011
Ошибка ora-19202 при обработке xml
под выходным xml:
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Body>
<GetEmploymentStatusMultipleResponse xmlns="http://MSB.Services.Integration.External.ServicesContracts.GOSI.IGOSIService">
<GetEmploymentStatusMultipleResult xmlns:b="http://MSB.Services.Integration.External.DataContracts.GOSI.MultipleEmploymentStatusStructure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<b:EmploymentStatusStructure xmlns:c="http://MSB.Services.Integration.External.DataContracts.GOSI.EmploymentStatusStructure">
<c:EmploymentStatusStructure>
<c:Contributor xmlns:d="http://MSB.Services.Integration.External.DataContracts.GOSI.ContributorStructure">
<d:ContributorID xmlns:e="http://MSB.Services.Integration.External.DataContracts.GOSI.NationalIdentifierSummaryStructure">
<e:NationalID>1086828181</e:NationalID>
</d:ContributorID>
</c:Contributor>
<c:ContributorName xmlns:d="http://MSB.Services.Integration.External.DataContracts.GOSI.PersonNameDetailsStructure">
<d:Item xmlns:e="http://MSB.Services.Integration.External.DataContracts.GOSI.PersonNameBodyStructure">
<e:Title i:nil="true" xmlns:f="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
<e:Prefix i:nil="true" xmlns:f="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
<e:FirstName>test1</e:FirstName>
<e:SecondName>test2</e:SecondName>
<e:ThirdName>test3</e:ThirdName>
<e:FourthName i:nil="true"/>
<e:LastName>test4</e:LastName>
<e:Suffix i:nil="true" xmlns:f="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
</d:Item>
<d:Language>AR</d:Language>
</c:ContributorName>
<c:ContributorStatus>2</c:ContributorStatus>
</c:EmploymentStatusStructure>
</b:EmploymentStatusStructure>
</GetEmploymentStatusMultipleResult>
</GetEmploymentStatusMultipleResponse>
</s:Body>
</s:Envelope>
#oracle #plsql
#Oracle #plsql
Вопрос:
Привет, я пытаюсь выполнить этот запрос, но получаю эту ошибку
Запрос 1
select OWNER,table_name,
to_number(extractvalue(xmltype(dbms_xmlgen.getxml('select count(*) c from '||owner||'.'||table_name)),'/ROWSET/ROW/C')) as count
from all_tables
Работает нормально
Запрос 2 — Включены дополнительные столбцы (sample_size, last_analyzed)
select OWNER,table_name,
to_number(extractvalue(xmltype(dbms_xmlgen.getxml('select count(*) c from '||owner||'.'||table_name)),'/ROWSET/ROW/C')) as count,
sample_size, last_analyzed
from all_tables
Ошибка — ?
ORA-19202: Error occurred in XML processing
ORA-00933: SQL command not properly ended
ORA-06512: at "SYS.DBMS_XMLGEN", line 176
ORA-06512: at line 1
19202. 00000 - "Error occurred in XML processing%s"
*Cause: An error occurred when processing the XML function
*Action: Check the given error message and fix the appropriate problem
Запрос 2 — Проблема в чем может быть проблема?— Объяснение и разрешение
Комментарии:
1. Не используйте all_tables, поскольку он содержит все таблицы, на которые у вас есть права. Даже если вставить только прямо в таблицу. Таким образом, вы можете использовать таблицу метаданных для получения привилегий и найти таблицы, в которых у вашего пользователя есть select grants own tablea
2. @ Popeye итак, в какой таблице мне нужно искать?
3.
from all_tables where Owner = you or you have select grant on table
. USER_TAB_PRIVS4. Проблема с привилегиями должна вызвать ORA-01031. Я думаю, что у вас есть имя таблицы со специальным символом в нем. Попробуйте
select * from all_tables where regexp_instr(table_name, '[^[:alnum:]$_]')>0;
5. Альтернативно, запустите
select 'select 1 from '||owner||'.'||table_name as q from all_tables
, скопируйте / вставьте выходные данные и запустите его как скрипт, чтобы увидеть, какое имя таблицы вызывает проблему.