Использование JTOPEN для вызова сохраненного процесса

Мне нужно вызвать хранимый процесс AS400 через SQL, используя соединение JTOPEN (JDBC), которое принимает 1 INOUT и 4 IN параметры. Я делаю это с помощью следующего SQL

CALL MYLIB.MYSP( ? ,'AJAJA1', '11111111', 'ą, ę, ć, ł, ń, ś, ż, ź', '0')

но выдает ошибку

[SQL0313] Число переменных хоста недопустимо.

Если я использую '' вместо знака вопроса, то получаю

[SQL0469] IN, OUT или INOUT недопустимы для параметра 1 в процедуре MYSP в MYLIB.

Это возможно?

1 ответ

Поскольку первый параметр хранимой процедуры является параметром INOUT, вам необходимо использовать объект CallableStatement, зарегистрировать первый параметр в качестве выходного параметра и установить значение первого параметра.

JTOpen имеет клиент JDBC, который использует отражение для вызова методов Java. Вот пример вызова хранимой процедуры, где первый параметр является параметром inout. (Примечание: программа генерирует много шума, потому что она пытается угадать, какой метод вызвать. Если один метод не работает, он пытается другой. Кроме того, 12 в вызове registerOutParameter действительно java.sql.Type.VARCHAR)

~> java -cp jt400.jar com.ibm.as400.access.jdbcClient.Main jdbc:as400:SYSTENAME USERID PASSWORD  
>CREATE PROCEDURE MYCONCAT(INOUT P1 VARCHAR(512) , P2 VARCHAR(80), P3 VARCHAR(80), P4     VARCHAR(80))  LANGUAGE SQL BEGIN SET P1 = P1 || P2 || P3 || P4; END 

>!SETVAR CSTMT=CON.prepareCall("CALL MYCONCAT(?,'B','C','D')")
CSTMT=STMT0002
...
>!CALLMETHOD CSTMT.registerOutParameter(1,12)
...
>!CALLMETHOD CSTMT.setString(1,'A')
...
>!CALLMETHOD CSTMT.execute()
...
Call returned false
>!CALLMETHOD CSTMT.getString(1)
Call returned ABCD
Другие вопросы по тегам