Cómo llamar a Sybase procedimiento almacenado con el nombre de parámetros utilizando JDBC

Tengo un procedimiento almacenado en Sybase que me puede invocar desde mi favorito de cliente de SQL como este:

exec getFooBar @Foo='FOO', @Bar='BAR'

Devuelve una tabla de resultados, así como una consulta. Tiene muchos parámetros, pero solo quiero llamar con Foo y a veces con Foo y Bar especificado.

Sybase ASE 15.0, estoy usando jConnect 6.0.5.

Puedo invocar esta usando un PreparedCall si puedo especificar sólo el primer parámetro:

CallableStatement cs = conn.prepareCall("{call getFooBar(?) }");
cs.setString(1,"FOO");

Sin embargo no puedo usar el @Foo la notación a pasar por mi params:

conn.prepareCall("{call getFooBar @Foo='FOO' }");
conn.prepareCall("call getFooBar @Foo='FOO' ");
conn.prepareCall("{call getFooBar @Foo=? }"); // + setString(1,'FOO')

En todos estos casos puedo obtener excepción de la base de datos me dice que la Foo parámetro que se espera:

com.sybase.jdbc3.jdbc.SybSQLException: Procedure getFooBar expects
parameter @Foo, which was not supplied

Idealmente me gustaría hacer esto con la Primavera JdbcTemplate o SimpleJdbcCall, pero con los que no podría llegar al punto donde podía con el viejo y simple de JDBC.

Entonces, para resumir, me gustaría evitar terminar con:

{ call getFooBar(?,null,null,null,null,null,?,null,null) }

Es posible que el uso de JDBC o mejor de la Primavera?

InformationsquelleAutor jabal | 2013-12-21

1 Kommentar

  1. 1

    No de la solución más eficiente, pero, ¿has probado a utilizar la llanura propia Instrucción con EXEC.

    por ejemplo.

    String mySql = "EXEC getFooBar @Foo='FOO', @Bar='BAR'";
    ResultSet rs = conn.getConnection().createStatement().executeQuery(mySql);

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea