XMLEXISTS operator

XMLEXISTS is an SQL/XML operator that you can use to query XML values in SQL.

The XMLEXISTS operator has two arguments, an XML query expression and a Derby XML value.

See "XML data types and operators" in the Derby Developer's Guide for more information.

Syntax

XMLEXISTS ( xqueryStringLiteral
    PASSING BY REF xmlValueExpression [ BY REF ] )
xqueryStringLiteral
Must be specified as a string literal. If this argument is specified as a parameter, an expression that is not a literal, or a literal that is not a string (for example an integer), Derby throws an error. The xqueryStringLiteral argument must also be an XPath expression. Derby does not support full XQuery, only the XPath subset. If it cannot compile or execute the query argument, Derby throws an SQLException. See http://www.w3.org/TR/xpath for more information on XPath expressions.
xmlValueExpression
Must be an XML data value and must constitute a well-formed SQL/XML document. The xmlValueExpression argument cannot be a parameter. Derby does not perform implicit parsing nor casting of XML values, so use of strings or any other data type results in an error. If the argument is a sequence that is returned by the Derby XMLQUERY operator, the argument is accepted if it is a sequence of exactly one node that is a document node. Otherwise Derby throws an error.
BY REF
Optional keywords that describe the only value passing mechanism supported by Derby. Since BY REF is also the default passing mechanism, the XMLEXISTS operator behaves the same whether the keywords are present or not. For more information on passing mechanisms, see the SQL/XML specification.

Operator results and combining with other operators

The result of the XMLEXISTS operator is a SQL boolean value that is based on the results from evaluating the xqueryStringLiteral against the xmlValueExpression. The XMLEXISTS operator returns:
UNKNOWN
When the xmlValueExpression is null.
TRUE
When the evaluation of the specified query expression against the specified xmlValueExpression returns a non-empty sequence of nodes or values.
FALSE
When evaluation of the specified query expression against the specified xmlValueExpression returns an empty sequence.

The XMLEXISTS operator does not return the actual results from the evaluation of the query. You must use the XMLQUERY operator to retrieve the actual results.

Since the result of the XMLEXISTS operator is an SQL boolean data type, you can use the XMLEXISTS operator wherever a boolean function is allowed. For example, you can use the XMLEXISTS operator as a check constraint in a table declaration or as a predicate in a WHERE clause.

Examples

In the x_table table, to determine if the xcol XML column for each row has an element called student with an age attribute equal to 20, use this statement:
SELECT id, XMLEXISTS('//student[@age=20]' PASSING BY REF xcol) 
    FROM x_table
In the x_table table, to return the ID for every row whose xcol XML column is non-null and contains the element /roster/student, use this statement:
SELECT id FROM x_table WHERE XMLEXISTS('/roster/student' PASSING BY REF xcol)
You can create the x_table table with a check constraint that limits which XML values can be inserted into the xcol XML column. In this example, the constraint is that the column has at least one student element with an age attribute with a value that is less than 25. To create the table, use this statement:
CREATE TABLE x_table ( id INT, xcol XML 
    CHECK (XMLEXISTS ('//student[@age < 25]' PASSING BY REF xcol)) )