[xquery-talk] Global variables in XQuery
Torsten Grust
grust at in.tum.de
Wed Oct 4 18:34:42 PDT 2006
Massimo,
the variable $my:global indeed is globally visible in your XQuery
text -- it remains, however, a variable in the usual XQuery sense:
it's just a name, bound to the value 1. This binding cannot be updated.
The let-expression inside function my:fact() introduces a *new name*
(bound to the xs:integer value 2). This local new name shadows the
global name. No ''update'' occurs, though.
Best wishes,
--Torsten
On Oct 4, 2006, 5:24 PM, Massimo Franceschet wrote with possible
deletions:
> Hi,
>
> I am confused about the behaviour of (what are called) global
> variables in
> XQuery. In paricular, I am not able to modify the value of a global
> variable inside a user-defined function. Here is an example:
>
> declare namespace my = 'my:stuff';
> declare variable $my:global as xs:integer := 1;
>
> declare function my:fact($n as xs:integer) as xs:integer
> {
> let $my:global := $my:global + 1
> return if ($n < 2)
> then 1
> else $n * my:fact($n - 1)
> };
>
> let $x := my:fact(10)
> return $x div $my:global
>
> When I run this query the global variable $my:global is not
> modified by
> the function my:fact and retains its original value (1). The result
> of the
> query is always 10! (instead of 10!/11).
>
> Massimo
>
>
> _______________________________________________
> talk at x-query.com
> http://x-query.com/mailman/listinfo/talk
>
--
| Prof. Dr. Torsten Grust grust at in.tum.de |
| http://www-db.in.tum.de/~grust/ |
| Database Systems - Technische Universität München (Germany) |
More information about the talk
mailing list