首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JTOPEN调用存储的proc

使用JTOPEN调用存储的proc
EN

Stack Overflow用户
提问于 2013-07-23 14:09:49
回答 1查看 1.1K关注 0票数 0

我需要使用一个JTOPEN (JDBC)连接通过SQL调用一个AS400存储的proc,它接受一个INOUT和4个IN。我使用以下SQL执行此操作

代码语言:javascript
复制
CALL MYLIB.MYSP( ? ,'AJAJA1', '11111111', 'ą, ę, ć, ł, ń, ś, ż, ź', '0')

但是它抛出一个错误

主机变量的SQL0313数无效。

如果我用'‘而不是问号,那么我得到

SQL0469输入、输出或输入输出对于MYLIB中过程MYSP中的参数1无效。

这个是可能的吗?

EN

回答 1

Stack Overflow用户

发布于 2014-07-25 21:36:15

由于存储过程的第一个参数是INOUT参数,所以需要使用CallableStatement对象,将第一个参数注册为输出参数,并设置第一个参数的值。

JTOpen有一个JDBC,它使用反射来调用Java方法。下面是一个调用存储过程的示例,其中第一个参数是inout参数。(注意:程序会产生很大的噪音,因为它试图猜测该调用哪种方法。如果一种方法失败,它将尝试另一种方法。而且,registerOutParameter调用中的12实际上是java.sql.Type.VARCHAR)

代码语言:javascript
复制
~> 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17812633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档