[xquery-talk] Setting global variables
John Snelson
john.snelson at oracle.com
Wed Oct 31 09:05:57 PST 2007
Hi Ronald,
There is no way to do what you're asking, since XQuery is a functional
language and variable values cannot be changed.
What's wrong with something like this:
declare variable $foo:listOfNames := fn:doc("mydoc.xml")//Name;
declare function foo:firstFunctionCalled(...)
{
...
};
declare function foo:functionCalled MuchLater(...)
{
...
if ($name = $foo:listOfNames)
...
};
John
Ronald Bourret wrote:
> Is there any way to set a global variable from inside a function? (By
> "global variable", I mean a variable declared in the prolog of a
> function library.)
>
> Basically, I'd like to read a document and save a subset of the document
> in a global variable, then refer to it later when doing lookups. For
> example, I'd like to do something like the following:
>
> declare variable $foo:listOfNames external;
>
> declare function foo:firstFunctionCalled(...)
> {
> let $foo:listOfNames := fn:doc("mydoc.xml")//Name
> ...
> };
>
> declare function foo:functionCalledMuchLater(...)
> {
> ...
> if ($name = $foo:listOfNames)
> ...
> };
>
> Currently, I pass such information from function to function until it is
> finally used. While this works (and some would argue is the correct
> style), it has the following drawbacks:
>
> 1) It is difficult to follow the information through the chain of
> functions.
>
> 2) It can be confusing to read the intermediate functions, as these
> never really use the information.
>
> 3) It is brittle when refactoring the intermediate functions. Because
> the information is not really used -- it's just passed along -- it is
> easy to accidentally drop.
>
> Thanks,
>
> -- Ron
>
> _______________________________________________
> talk at x-query.com
> http://x-query.com/mailman/listinfo/talk
--
John Snelson, Oracle Corporation
Berkeley DB XML: http://www.oracle.com/database/berkeley-db/xml
XQilla: http://xqilla.sourceforge.net
More information about the talk
mailing list