Hello Aldo,

I'd suggest to use SQL BIFs sequence_next() and sequence_set(). Like any
other functions without INOUT or OUT parameters, they can be called from
SPARQL as bif:sequence_next() / bif:sequence_set()

http://docs.openlinksw.com/virtuoso/fn_sequence_next.html
http://docs.openlinksw.com/virtuoso/sequenceobjects.html

For user-defined functions, an sql: prefix is better than bif: .
sql:foo(x) will call DB.DBA.foo(x) . The difference is that bif:foo will
create the call of unqualified foo(). If no built-in function foo()
exists and the system contains many users and database qualifiers, the
search for exact name of XXX.YYY.foo() may consume nonzero time (taking
all security bore-me into account).

Best Regards,

Ivan Mikhailov
OpenLink Software
http://virtuoso.openlinksw.com


On Fri, 2010-11-19 at 19:17 -0300, Aldo Bucchi wrote:
> Hi,
> 
> Problem
> * I need to generate unique IDs from within Virtuoso ( unique only to
> a given Virtuoso instance/cluster would suffice )
> * I need to do this via SPARQL HTTP prior to issuing a SPARQL insert
> 
> Current solution:
> Create a table and procedure that keeps track of an incremental ID and
> returns each ID only once.
> Access this procedure via SPARQL HTTP by using the ( select (
> bif:foo() ) as ?id where { ?s ?p ?o } limit 1 ) trick.
> 
> Question:
> Any suggestions?
> - for a better way of generating uniques
> - for a better way of accessing the procedure from SPARQL
> ?
> 
> Also. I understand that blank nodes provide similar functionality. But
> how can I access the "last insert id"?
> 
> Regards,
> A
> 



Reply via email to