Predicado XMLEXISTS

El predicado XMLEXISTS prueba si una expresión XQuery devuelve una secuencia de uno o más elementos.

Leer diagrama de sintaxisOmitir el diagrama de sintaxis visualXMLEXISTS(constante de expresión xqueryPASSINGBY REF,argumento-xquery1)
Notas:
  • no se debe especificar más de una vez 1 xquery-context-item-expression.

argumento-xquery

Leer diagrama de sintaxisOmitir el diagrama de sintaxis visualxquery-contexto-elemento-expresiónxquery-contexto-elemento-expresiónASidentificador
constante-expresión-xquery
Especifica una constante de cadena de caracteres que se interpreta como una expresión de tipo " XQuery " utilizando la sintaxis del lenguaje " XQuery " admitida. Para obtener información sobre la sintaxis del lenguaje XQuery , consulte la Descripción general de pureXML. xquery-expression-constant no puede ser una expresión de actualización de e XQuery . La expresión " XQuery " se evalúa con los argumentos especificados en xquery-argument. xquery-expression-constant no debe ser una cadena vacía o una cadena de espacios en blanco.
PASSING
Especifica los valores de entrada y la manera en que estos valores se pasan a la expresión e XQuery a especificada por xquery-expression-constant.
BY REF
Especifica que los argumentos de valor de entrada XML deben pasarse por referencia. Cuando los valores XML se pasan por referencia, la evaluación de la estructura de árbol ( XQuery ) utiliza los árboles de nodos de entrada, conservando todas las propiedades, incluidas las identidades de los nodos originales y el orden del documento. Si dos argumentos pasan el mismo valor XML, las comparaciones de identidad de nodo y las comparaciones de ordenación de documentos que involucran algunos nodos que están contenidos entre los dos argumentos de entrada podrían referirse a nodos dentro del mismo árbol de nodos XML.

Esta cláusula no afectará al modo en que se pasan los valores que no son XML. Los valores que no son XML crean una copia nueva del valor durante la conversión a XML.

argumento-xquery
Especifica un argumento para usar en la evaluación de la expresión de la constante de expresión de consulta ( XQuery ) especificada por xquery-expression-constant. Un argumento de consulta es una expresión que devuelve un valor que es XML, entero, decimal o una cadena de caracteres o gráfica que no es un LOB. xquery-argument no debe devolver tipos de datos ROWID, TIMESTAMP, cadena binaria, REAL, DECFLOAT, ni un tipo de datos de cadena de caracteres que sean datos de bits, y no debe hacer referencia a una expresión de secuencia o a una especificación OLAP.

Un argumento especifica un valor y la forma en que ese valor se debe pasar. El uso de un argumento en la cláusula PASSING en la expresión XQuery depende de si el argumento se especifica como xquery-context-item-expression o como xquery-variable-expression. El argumento incluye una expresión SQL que se evalúa antes de pasar el resultado a la expresión e XQuery .

  • Si el valor resultante es un valor XML, se convierte en un input-xml-value. Se pasa por referencia, lo que significa que los valores originales, no las copias, se utilizan en la evaluación de la expresión e XQuery .
  • Si el valor resultante no es un valor XML, el resultado de la expresión debe poder convertirse en un valor XML. El valor de reparto se convierte en un valor xml de entrada. Una cadena vacía se convierte en una cadena vacía XML.
  • Si el valor resultante es nulo, se convierte en una secuencia vacía XML si el argumento es xquery-variable-expression. Si el argumento es xquery-context-expression, los predicados XMLEXISTS devuelven unknown.
expresión-elemento-contexto-xquery
xquery-context-item-expression especifica el elemento de contexto inicial en la expresión de contexto de la variable ( XQuery ) especificada por xquery-expression-constant. El valor del elemento de contexto inicial es el resultado de la conversión de xquery-context-item-expression a XML. la expresión xquery-context-item no debe especificarse más de una vez.

xquery-context-item-expression no debe ser una secuencia de más de un elemento. Si el resultado de xquery-context-item-expression es una cadena vacía, la expresión XQuery se evalúa con el elemento de contexto inicial establecido en una cadena XML vacía.

Si la expresión xquery-context-item no se especifica o es una cadena vacía, el elemento de contexto inicial en la expresión XQuery no está definido, y la expresión XQuery no debe hacer referencia al elemento de contexto inicial. No se crea una variable " XQuery " para la expresión del elemento de contexto.

Si no se especifica la expresión de contexto xquery o el valor xml de entrada que resulta de la expresión de contexto xquery es una secuencia XML vacía, el elemento de contexto inicial no está definido. Si la expresión " XQuery " se refiere al elemento de contexto inicial, debe especificarse con un valor que no sea una secuencia vacía XML.

expresión-variable-xquery
xquery-variable-expression especifica un argumento para la expresión XQuery . Se crea una variable " XQuery " para cada "xquery-variable-expression ", y la variable " XQuery " se establece en el resultado de "xquery-argument-expression" convertido a XML. Si el resultado de xquery-variable-expression es una cadena vacía, la variable XQuery se establece en una cadena XML vacía. Si xquery-variable-expression es nulo, la variable XQuery se establece en una secuencia XML vacía. Por ejemplo, PASSING T.A + T.B as "sum" crea una variable de tipo " XQuery " llamada sum. El alcance de las variables e XQuery es creadas a partir de la cláusula PASSING es la expresión e XQuery e especificada por xquery-expression-constant.
AS identificador
Especifica que el valor generado por xquery-variable-expression se pasará a xquery-expression-constant como una variable de tipo " XQuery " llamada "identifier". La longitud del nombre no debe ser superior a 128 bytes. El signo de dólar ($) que precede a los nombres de variables en el lenguaje de programación de aplicaciones ( XQuery ) no se incluye en el identificador. El nombre debe ser un XML NCName que no sea el mismo que el identificador de otra expresión de variable xquery en la misma cláusula PASSING.

El resultado del predicado se determina de la siguiente manera:

  • Se desconoce el resultado si la expresión de elemento de contexto xquery especificada en la cláusula PASSING es un valor NULL
  • el resultado es falso si el resultado de la expresión e XQuery o es una secuencia vacía
  • el resultado es verdadero en todos los demás casos

Si la evaluación de la expresión XQuery da como resultado un error, XMLEXISTS devuelve un error. El predicado XMLEXISTS no es compatible con la cláusula ON de las uniones externas.

Ejemplo : Encontrar todos los pedidos de compra que compran un vigilabebés. Este ejemplo busca el número de producto de los monitores para bebés en la tabla de productos y une el resultado a la tabla de códigos de artículo ( PurchaseOrders ). A continuación, evalúa la expresión e XQuery e //item[@partnum = $n] para cada fila y devuelve aquellas filas que contienen un nodo de elemento de artículo con un atributo e partNum e que es igual al número de producto de «Baby Monitor». El elemento de contexto para la expresión XQuery es PO.POrder. Se crea una variable de tipo " XQuery ", $n, y se inicializa con el valor de S.prodno:
   SELECT S.prodno, count(*) as result
      FROM PurchaseOrders PO, Products S
      WHERE XMLEXISTS ('//item[@partNum = $n]'
                       PASSING PO.POrder,
                               S.prodno AS "n")
      AND S.prod_name = 'Baby Monitor';
Los resultados podrían ser similares a los siguientes:
Prodno      result
-------------------------------

926-AA      1