Prepares a SQL statement for execution, returning a function which can be called with parameters to execute the statement, returning no result.

prepared-statement($connection as javatype:java.sql.Connection, $statement as xs:string) ➔ function(*)





A JDBC database connection established using sql:connect




A SQL statement, typically containing question marks as place-holders for parameters





Saxon availability

Implemented since Saxon 9.9. Requires Saxon-PE or Saxon-EE. Available for Java only.


The function prepares a SQL statement for execution. The statement will typically be one that does not return a result, but which uses question marks as place-holders for parameters, for example INSERT INTO EMP VALUES (?, ?, ?). A call on sql:prepared-statement returns a function which can be called with parameters to execute the statement.

The arity of the returned function (the "invocation function") is equal to the number of question-marks appearing in the source statement.

The invocation function expects the supplied arguments to be atomic values. The data types of the arguments should correspond to the types of the values expected by the SQL statement: for example, xs:string for a VARCHAR column, xs:decimal for a SQL decimal, and so on.

The invocation function always returns an empty sequence, though to avoid over-aggressive optimization, it is declared as returning item()?. Because the invocation function is called for its side-effects, it is recommended to call it in the action expression of a saxon:do instruction.


<xsl:variable name="add-book" as="function(*)" select="sql:prepared-statement($connection, 'INSERT INTO book (isbn, title, author, category) VALUES (?, ?, ?, ?)')"/> <xsl:for-each select="//book"> <saxon:do action="$add-book(@isbn, @title, @author, @category)"/> </xsl:for-each>