Использование ora: view с XMLTable для запроса реляционной таблицы как XML - PullRequest
0 голосов
/ 04 апреля 2011

У меня есть реляционная таблица Oracle с именем DOCTYPES с идентификатором столбцов, DOCTYPE, SUBTYPE.

Когда я запускаю следующую инструкцию в Oracle SQL Developer

SELECT * FROM XMLTable('for $i in ora:view("LAZ", "DOCTYPES")/ROW
                        return $i/SUBTYPE')

Я получаю результаты междутеги, как и ожидалось.Но когда я запускаю следующую инструкцию, я получаю сообщение об ошибке:

SELECT * FROM XMLTable('for $i in ora:view("LAZ", "DOCTYPES")/ROW
                        return <SUBTYPE="{$i/SUBTYPE}"/>')

LPX-00801: синтаксическая ошибка XQuery при '='.Я не понимаю, почему второе утверждение не работает.

Большое спасибо за вашу помощь заранее.

Ответы [ 2 ]

0 голосов
/ 05 апреля 2011

Не знаю, что Oracle делает из XQuery, но оператор между апострофами явно имеет синтаксическую ошибку XQuery в '=', так как IMO был правильно диагностирован.

Это потому, что вы открываете прямойконструктор элемента, но знак равенства неправильно следует за именем тега.Знак равенства используется внутри конструктора прямого элемента для отделения имен атрибутов от значений атрибутов.Таким образом, может работать следующее:

SELECT * FROM XMLTable('for $i in ora:view("LAZ", "DOCTYPES")/ROW
                        return <SUBTYPE name="{$i/SUBTYPE}"/>')

Спецификация приведена в 3.7.1 Конструкторах прямого элемента в рекомендации XQuery .

0 голосов
/ 05 апреля 2011

Синтаксис был неверным.

SELECT * FROM XMLTable('for $i in ora:view("LAZ", "DOCTYPES")/ROW
                    return <SUBTYPE="{data($i/SUBTYPE)}"/>')
...