Как включить несколько вызовов функций или назначений в оператор if-then - PullRequest
0 голосов
/ 27 июня 2019

Я новичок в xquery, и мне трудно найти больше, чем просто основы онлайн.У меня есть существующий код, который я хочу изменить, но я не знаю, как включить несколько вызовов функций или назначений переменных в один оператор if-then.

Скажем, у меня есть этот блок

if (fn:namespace-uri(.) = 'http://xmlns.oracle.com/communications/sce/dictionary/testNamespace' 
and //tns:CreateSalesOrder/tns:ListOfSWIOrderIO/tns:SWIOrder/tns:OrderTypeCode/text() = 'Test Order'
and $isDefaultVersion)
    then true()
else false()

Как я могу включить вызов функции после true ()?

Примерно так, но я не знаю точный синтаксис:

 if (fn:namespace-uri(.) = 'http://xmlns.oracle.com/communications/sce/dictionary/testNamespace' 
and //tns:CreateSalesOrder/tns:ListOfSWIOrderIO/tns:SWIOrder/tns:OrderTypeCode/text() = 'Test Order'
and $isDefaultVersion)
    then true(), util:write-record('123','johndoe')
else false()

1 Ответ

1 голос
/ 28 июня 2019

Вы можете написать:

if (...) then (true(), util:write-record('123','johndoe')) else ...

Обратите внимание на круглые скобки.

Из названия я подозреваю, что util:write-record() - это функция, которая имеет побочные эффекты. Функции с побочными эффектами очень сложны в XQuery, и вам нужно понять, как они обрабатываются вашей конкретной реализацией. Всегда существует риск того, что оптимизатор запросов изменит порядок оценки, поэтому побочные эффекты произойдут в неожиданном порядке, или что определенные вызовы вообще не произойдут, поскольку оптимизатор решит, что результат не нужен.

...