[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