powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / enum in oracle
5 сообщений из 5, страница 1 из 1
enum in oracle
    #37370237
SBK755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу помощи, уважаемые форумчане.

Задача стара как мир - принять и разобрать XML в соответствии с известной схемой.

Последовательность совершаемых действий:
1) регистрирую схему (с созданием типов, но без создания таблиц)
2) преобразовываю XML в объект в соответствии с зарегестрированной схемой:
ReqXml.toobject(ReqObj,Schema_Rec.Schema_Url,'main_teg')
3) дальше анализирую значения полей сформированного объекта и раскидываю нужные мне по своим таблицам.

При регистрации схемы одно из необходимых мне полей в объекте заводится с типом "XDB"."XDB$ENUM_T":
TYPE "x_type" AS OBJECT ("SYS_XDBPD$" "XDB"."XDB$RAW_LIST_T","x_field" "XDB"."XDB$ENUM_T")

В исходном XSD файле данный элемент описан как:
...
<xs:element name="x_field">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="xxx"/>
<xs:enumeration value="yyy"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
...

Проблема в том, что не могу понять как в PLSQL обратиться к значению (значениям) поля
x_field: что-то вроде my_ReqObj."x_field".

Прошу помочь советом.
...
Рейтинг: 0 / 0
enum in oracle
    #37370280
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SBK755,

dba_type_methods --> lookupValue()
...
Рейтинг: 0 / 0
enum in oracle
    #37370798
SBK755
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-,

а можно попросить пример использования метода или ткнуть носом в документацию, где это можно увидеть. Был бы очень признателен Вам.
...
Рейтинг: 0 / 0
enum in oracle
    #37397016
Vassili
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без манипуляций на права юзеров SYS и XDB вы не сможете сделать прямой select полей указанных Вами типов. Прямое обращение к полям типов проходит только при построении индексов.

Единственный быстрый тип select(а) - наподобие

SELECT l.column_1,
d.column_2
FROM EAIST4T l ,
XMLtable ( '$t/Data' passing l.OBJECT_VALUE AS "t" columns p1 XMLTYPE PATH 'Tender' ) i ,
XMLtable ( '$n/Tender' passing i.p1 AS "n" columns p2 XMLTYPE PATH 'Lots', tendregnum PATH 'TenderRegNumber', tendname PATH 'Name', publdate PATH 'PublicationDate' ) d

и т.д.

Если для вас это важно, пишите на почту в профиль.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
enum in oracle
    #40012903
Basil_Tsvetkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, оказалось, что в гугле до сих пор нет решения, а есть только намеки и два предложения писать в личку (одно из них в этом топике выше, другое на community.oracle.com).

И я сегодня тоже уперся в этот енум, как коллеги восьмью годами ранее.

Поэтому чтобы никто ломал голову сообщаю - решение простое, просто абсолютно лобовое:
Енум надо превратить в VARCHAR2 (для xsd:string).

Заранее, до загрузки схемы, для тех элементов, которые содержат xsd:enumeration и превращаются в XDB$ENUM_T , надо указать аннотацию SQLType = VARCHAR2 вручную или с помощью процедуры dbms_xmlschema_annotate.setSQLType(много_аргументов).

Да, тем не менее, напоминаю, что использовать сгенерированные при загрузке схемы типы напрямую Oracle не разрешает!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / enum in oracle
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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