Вы передаете один аргумент ora:view
, который должен быть именем таблицы.В данный момент вы пытаетесь настроить поиск таблицы с именем BOOK
в схеме BOOKDB
с помощью точечной нотации SQL (BOOKDB.BOOK
), но при работе с этим значением вы работаете в контексте XML,Как показано в документации, вы можете указать схему, используя необязательный первый аргумент этой функции:
XQUERY
element Result {
for $lang in distinct-values(ora:view("BOOKDB", "BOOK")//ORIGINALLANGUAGE/text())
let $sum := for $book in ora:view("BOOKDB", "BOOK")//ORIGINALLANGUAGE
return $book[text() = $lang]
return element Language {attribute name {$lang}, attribute Total {count($sum)}}}
Result Sequence
--------------------------------------------------------------------------------
<Result><Language name="English" Total="1"></Language></Result>
(Это основано на именах столбцов в кавычках без кавычек, которые вы добавили в вопрос, например, originallanguage
; не смешанное значение в изображении, которое вы первоначально разместили, что подразумевало, что вы указали идентификаторы, например "OriginalLanguage"
. И, как обсуждалось в комментариях / чате, здесь BOOKDB
- это схема , а не база данных; сочетание терминологии сбивает с толку, как и «DB» как часть имени схемы.)
Это просто клиентская оболочка для вызова XMLTable, кстати:
select column_value from xmltable('element Result {
for $lang in distinct-values(ora:view("BOOKDB", "BOOK")//ORIGINALLANGUAGE/text())
let $sum := for $book in ora:view("BOOKDB", "BOOK")//ORIGINALLANGUAGE
return $book[text() = $lang]
return element Language {attribute name {$lang}, attribute Total {count($sum)}}}')
что вы также можете сделать как XMLQuery:
select xmlquery('element Result {
for $lang in distinct-values(ora:view("BOOKDB", "BOOK")//ORIGINALLANGUAGE/text())
let $sum := for $book in ora:view("BOOKDB", "BOOK")//ORIGINALLANGUAGE
return $book[text() = $lang]
return element Language {attribute name {$lang}, attribute Total {count($sum)}}}'
returning content)
from dual
Кроме того, ora:view
устарела;но вы можете сделать то же самое с fn:collection
:
XQUERY
element Result {
for $lang in distinct-values(fn:collection("oradb:/BOOKDB/BOOK")//ORIGINALLANGUAGE/text())
let $sum := for $book in fn:collection("oradb:/BOOKDB/BOOK")//ORIGINALLANGUAGE
return $book[text() = $lang]
return element Language {attribute name {$lang}, attribute Total {count($sum)}}}
Result Sequence
--------------------------------------------------------------------------------
<Result><Language name="English" Total="1"></Language></Result>