Menu

#1468 CallableStatement cannot handle expressions containing bind variables

current-release
open-fixed
None
5
2020-09-08
2017-02-05
Lukas Eder
No

I have a procedure like this:

CREATE PROCEDURE p_author_exists (IN author_name VARCHAR(50), OUT result INT)
READS SQL DATA
BEGIN ATOMIC
  SELECT COUNT(*) INTO result
    FROM t_author
   WHERE first_name LIKE author_name
      OR last_name LIKE author_name;
END

I can call the procedure easily using a CallableStatement like this:

CallableStatement s = c.prepareCall("{ call P_AUTHOR_EXISTS(?, ?) }"));
// .. Bind IN parameter
// .. Register OUT parameter

I can also call the procedure using a constant expression for the IN parameter:

CallableStatement s = c.prepareCall("{ call P_AUTHOR_EXISTS('abc' || cast('xyz' as varchar(50)), ?) }"));
// .. Register OUT parameter

However, I cannot use any expression that contains a bind variable, e.g.:

CallableStatement s = c.prepareCall("{ call P_AUTHOR_EXISTS(cast(? as varchar(50)), ?) }"));
// .. Register OUT parameter

This results in the following exception:

java.lang.NullPointerException
    at org.hsqldb.StatementProcedure.getParametersMetaData(Unknown Source)
    at org.hsqldb.result.Result.newPrepareResponse(Unknown Source)
    at org.hsqldb.Session.execute(Unknown Source)
    at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
    at org.hsqldb.jdbc.JDBCCallableStatement.<init>(Unknown Source)
    at org.hsqldb.jdbc.JDBCConnection.prepareCall(Unknown Source)

Discussion

  • Fred Toussi

    Fred Toussi - 2020-09-08
    • status: open --> open-fixed
    • assigned_to: Fred Toussi
     
  • Fred Toussi

    Fred Toussi - 2020-09-08

    Has been fixed in recent versions.

     

Log in to post a comment.