Вызов процедуры Informix версии (12) в Java

#stored-procedures #informix

#хранимые процедуры #informix

Вопрос:

Процедура вызывается всякий раз, когда нет выходных параметров, но всякий раз, когда задаются выходные параметры, возникают следующие ошибки:

java.sql.SQLException: Процедура (тест) не может быть разрешена.

Ниже приведен мой код:

 Class.forName("com.informix.jdbc.IfxDriver");
            java.sql.Connection connection =DriverManager.getConnection("jdbc:informix-sqli://server_details");
            CallableStatement stmt = null; 
  String sql = "{call test (?, ?)}";
              stmt =  connection.prepareCall(sql);
                 stmt.registerOutParameter(1,   java.sql.Types.VARCHAR);
                 stmt.registerOutParameter(2,   java.sql.Types.VARCHAR);

                 stmt.execute(); 
  

Комментарии:

1. Я думаю, вам следует добавить упрощенный исходный код вашей test() процедуры и более подробную информацию о вашей среде, особенно о версии сервера Informix и версии драйвера JDBC.

Ответ №1:

Мой простой пример процедуры Informix с двумя выходными параметрами, вызываемыми JDBC CallableStatement , работает:

 db = DriverManager.getConnection(db_url, usr, passwd)
c = db.createStatement()
try:
    c.execute('DROP PROCEDURE test_out_params;')
except:
    pass
c.execute("""CREATE PROCEDURE test_out_params(OUT arg1 VARCHAR(200), OUT arg2 VARCHAR(200))
        LET arg1 = 'arg1';
        LET arg2 = 'arg2';
    END PROCEDURE;""")

stmt = db.prepareCall("{call test_out_params (?, ?)}")
stmt.registerOutParameter(1, Types.VARCHAR)
stmt.registerOutParameter(2, Types.VARCHAR)
stmt.executeQuery()
a1 = stmt.getString(1)
a2 = stmt.getString(2)
print('call result: %s %sn' % (a1, a2))
  

Я использовал Jython в этом коде, и я получил:

 call result: arg1 arg2
  

Я думаю, вам следует добавить упрощенный исходный код вашей test() процедуры и более подробную информацию о вашей среде, особенно о версии сервера Informix и версии драйвера JDBC.