[XQuery] Sharing a value between expressions?
Hello, I would like to assign a sequence to a variable and then share this variable between two expressions. Particularly I want to create a list of documents to delete from the db and then return the number of deleted documents. Code sketch of what I am trying: let $nodes := [...] let $base-uris := for $node in $nodes return base-uri($node) let $distinct-base-uris := distinct-values($base-uris) for $base-uri in $distinct-base-uris return db:delete("db", $base-uri), return count($distinct-base-uris) --- The problem with this approach is that $distinct-base-uris is local to the first expressions and not in scope for the count call. I tried to just duplicate all code, but then I get an error message that "no updating expression [is] allowed". Is there any way to achieve what I want and put my value in a scope accessible by both expressions? Regards, Johannes
Hi Johannes, Am 16.01.2013 11:31, schrieb Johannes Krampf:
I would like to assign a sequence to a variable and then share this variable between two expressions. Particularly I want to create a list of documents to delete from the db and then return the number of deleted documents. [...] Is there any way to achieve what I want and put my value in a scope accessible by both expressions?
try this: let $nodes := ..., $base-uris := $nodes/base-uri(), $distinct-base-uris := distinct-values($base-uris) return ( for $base-uri in $distinct-base-uris return db:delete("db", $base-uri), db:output(count($distinct-base-uris)) ) Hope that helps, cheers, Leo
Hi Leo, this worked like a charm, thank you! (And is also documented in the wiki, shame on me for not seeing this.) - Johannes On 01/16/2013 03:44 PM, Leo Wörteler wrote:
Hi Johannes,
Am 16.01.2013 11:31, schrieb Johannes Krampf:
I would like to assign a sequence to a variable and then share this variable between two expressions. Particularly I want to create a list of documents to delete from the db and then return the number of deleted documents. [...] Is there any way to achieve what I want and put my value in a scope accessible by both expressions?
try this:
let $nodes := ..., $base-uris := $nodes/base-uri(), $distinct-base-uris := distinct-values($base-uris) return ( for $base-uri in $distinct-base-uris return db:delete("db", $base-uri), db:output(count($distinct-base-uris)) )
Hope that helps, cheers, Leo
participants (2)
-
Johannes Krampf -
Leo Wörteler