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 >
