Thanks for the help ,Max. I modified my xquery this way: declare namespace pkg="http://schemas.microsoft.com/office/2006/xmlPackage"; declare namespace w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"; declare function local:indice() as xs:integer* { for $i in(1 to count(for $document in collection("curriculum") let $c:= document-uri($document) for $a in doc($c) order by $c return for $e in doc($c)//w:tc[.//text()="Nome"] return $e/./following::text()except (for $x in doc($c)//w:tc[.//text()="Indirizzo"] return $x//following::text()))) return $i }; declare function local:nome() as xs:string* { for $n in (for $document in collection("curriculum") let $c:= document-uri($document) for $a in doc($c) order by $c return for $e in doc($c)//w:tc[.//text()="Nome"] return $e/./following::text()except (for $x in doc($c)//w:tc[.//text()="Indirizzo"] return $x//following::text())) return $n }; declare function local:indirizzo() as xs:string* { for $in in (for $document in collection("curriculum") let $c:= document-uri($document) for $a in doc($c) order by $c return for $e in doc($c)//w:tc[.//text()="Indirizzo"] return $e/./following::text() except (for $x in doc($c)//w:tc[.//text()="Telefono"] return $x//following::text())) return $in }; declare function local:telefono() as xs:string* { for $t in (for $document in collection("curriculum") let $c:= document-uri($document) for $a in doc($c) order by $c return for $e in doc($c)//w:tc[.//text()="Telefono"] return $e/./following::text() except (for $x in doc($c)//w:tc[.//text()="Fax"] return $x//following::text())) return $t }; declare function local:fax() as xs:string* { for $f in (for $document in collection("curriculum") let $c:= document-uri($document) for $a in doc($c) order by $c return for $e in doc($c)//w:tc[.//text()="Fax"] return $e/./following::text() except (for $x in doc($c)//w:tc[.//text()="E-mail"] return $x//following::text())) return $f }; declare function local:email() as xs:string* { for $em in (for $document in collection("curriculum") let $c:= document-uri($document) for $a in doc($c) order by $c return for $e in doc($c)//w:tc[.//text()="E-mail"] return $e/./following::text() except (for $x in doc($c)//w:tc[.//text()="Nazionalità"] return $x//following::text())) return $em }; declare function local:nazionalita() as xs:string* { for $na in (for $document in collection("curriculum") let $c:= document-uri($document) for $a in doc($c) order by $c return for $e in doc($c)//w:tc[.//text()="Nazionalità"] return $e/./following::text() except (for $x in doc($c)//w:tc[.//text() ="D" ] return $x//following::text())) return $na }; declare function local:dataNascita() as xs:string* { for $d in (for $document in collection("curriculum") let $c:= document-uri($document) for $a in doc($c) order by $c return for $e in doc($c)//w:tc[.//text()="Data di nascita"] return $e/./following::text() except (for $x in doc($c)//w:tc[.//text()="Esperienza lavorativa"] return $x//following::text())) return $d }; for $indice at $pos in local:indice() for $nome in local:nome() [$pos] for $indirizzo in local:indirizzo()[$pos] for $telefono in local:telefono()[$pos] for $fax in local:fax()[$pos] for $email in local:email()[$pos] for $nazionalita in local:nazionalita()[$pos] for $datanascita in local:dataNascita()[$pos] let $init := sql:init("com.mysql.jdbc.Driver"), $conn := sql:connect("jdbc:mysql://localhost:3306/DbName","user","password''), $stmt := sql:prepare($conn, "INSERT INTO informazionipersonali(idInformazioniPersonali,nome,indirizzo,telefono,fax,email,nazionalità,dataNascita) VALUES(?,?,?,?,?,?,?,?) ") let $params:= <sql:parameters> <sql:parameter type="int">{$indice}</sql:parameter> <sql:parameter type="string">{$nome}</sql:parameter> <sql:parameter type="string">{$indirizzo}</sql:parameter> <sql:parameter type="string">{$telefono}</sql:parameter> <sql:parameter type="string">{$fax}</sql:parameter> <sql:parameter type="string">{$email}</sql:parameter> <sql:parameter type="string">{$nazionalita}</sql:parameter> <sql:parameter type="string">{$datanascita}</sql:parameter> </sql:parameters> return sql:execute-prepared($stmt,$params) It works,but it returns only the first row in my database, and i want a row for each value (indice,nome,indirizzo,........) How can i do? --------- Original Message -------- Da: "Maximilian Gärber" <mgaerber@arcor.de> To: "basex-talk@mailman.uni-konstanz.de" <basex-talk@mailman.uni-konstanz.de> Oggetto: Re: [basex-talk] problem with prepared Data: 09/09/15 09:12 or using a where statement for $indice at $pos in local:indice() for $nome at $pos2 in local:nome() let $params:= <sql:parameters> <sql:parameter type="int">{$indice}</sql:parameter> <sql:parameter type="string">{$nome}</sql:parameter> </sql:parameters> where $pos2 = $pos return $params 2015-09-09 9:05 GMT+02:00 Maximilian Gärber <mgaerber@arcor.de>: > Hi, > > when you join (by nesting for statements) you will always get the > combinations unless you provide more constraints. > > You might try something like: > > declare function local:indice() as xs:integer* { > > for $i in (1 to 10) > return $i > }; > > declare function local:nome() as xs:string* { > > for $n in ('a', 'b', 'c', 'd') > return $n > }; > > for $indice at $pos in local:indice() > for $nome in local:nome()[$pos] > > let $params:= <sql:parameters> > <sql:parameter type="int">{$indice}</sql:parameter> > <sql:parameter type="string">{$nome}</sql:parameter> > </sql:parameters> > return $params > > > Regards, Max > > 2015-09-08 16:20 GMT+02:00 <michele.greco2@email.it>: >> Hi i have following xquery: >> declare function local:indice() as xs:integer* { >> count(for $document in collection("curriculum") >> let $c:= document-uri($document) >> for $a in doc($c) >> order by $c >> return >> for $e in doc($c)//w:tc[.//text()="Nome"] >> return $e/./following::text()except >> (for $x in doc($c)//w:tc[.//text()="Indirizzo"] >> return $x//following::text())) >> }; >> >> declare function local:nome() as xs:string* { >> for $document in collection("curriculum") >> let $c:= document-uri($document) >> for $a in doc($c) >> order by $c >> return >> for $e in doc($c)//w:tc[.//text()="Nome"] >> return $e/./following::text()except >> (for $x in doc($c)//w:tc[.//text()="Indirizzo"] >> return $x//following::text()) >> }; >> for $ indice in local:indice() >> let $init := sql:init("com.mysql.jdbc.Driver"), >> $conn := >> sql:connect("jdbc:mysql://localhost:3306/DBName","user","password''), >> $stmt := sql:prepare($conn, "INSERT INTO >> informazionipersonali(idInformazioniPersonali,nome,indirizzo,telefono,fax,email,nazionalità,dataNascita) >> VALUES(?,?,'null','null','null','null','null','null') ") >> for $nome in local:nome() >> let $params:= <sql:parameters> >> <sql:parameter type="int">{$indice}</sql:parameter> >> <sql:parameter type="string">{$nome}</sql:parameter> >> </sql:parameters> >> return sql:execute-prepared($stmt,$params) >> >> >> which return a combination of index and names, but i want only one row for >> each index and name. >> How can i do? >> >> ---- >> ZE-Light e ZE-Pro: servizi zimbra per caselle con dominio email.it, per >> tutti i dettagli clicca qui >> >> Sponsor: >> Registra i domini che desideri ed inizia a creare il tuo sito web >> Clicca qui -- ZE-Light e ZE-Pro: servizi zimbra per caselle con dominio email.it, per tutti i dettagli Clicca qui http://posta.email.it/caselle-di-posta-z-email-it/?utm_campaign=email_Zimbra... Sponsor: Caselle con tuo dominio su piattaforma Zimbra, fino a 30 GB di spazio, sincronizzazione dati e backup Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?mid=13324&d=10-9