使用自定义类型输出参数从JDBC调用HANA存储过程

2020-09-12 09:50发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我在HANA(带有本地VM上的应用程序的Express Edition 2)上创建了以下过程:

创建过程MYDB.UNIVERSITY.TestProc(out_students MYDB.UNIVERSITY.TT_STUDENTS)
 语言SQLSCRIPT SQL安全调用程序读取SQL数据为
 开始
   out_students =来自MYDB.UNIVERSITY.STUDENT的SELECT NAME,FIRST_NAME和SEMESTERS;
 END; 

现在,我想调用它并使用JDBC获得参数" out_students"的结果。 据我所知,我可以使用" CallableStatement"类调用过程,并使用其" registerOutParameter"方法在特定位置注册输出参数。 这是相关的代码段:

 CallableStatement stmt = connection.prepareCall(" {CALL MYDB.UNIVERSITY.TestProc(?)}");;
 stmt.registerOutParameter(1,Types.STRUCT," MYDB.UNIVERSITY.TT_STUDENTS");
 stmt.execute(); 

但是,出现以下错误:

查询失败:SAP DBTech JDBC:无效的参数索引:1
com.sap.db.jdbc.exceptions.JDBCDriverException:SAP DBTech JDBC:无效的参数索引:1
com.sap.db.jdbc.exceptions.SQLExceptionSapDB.newInstance(SQLExceptionSapDB.java:26)
处的com.sap.db.jdbc.exceptions.SQLExceptionSapDB._newInstance(SQLExceptionSapDB.java:191)
HANAConnector.main(HANAConnector.java :)上的sap.db.jdbc.PreparedStatementSapDB._registerOutParameter(PreparedStatementSapDB.java:2357)
在com.sap.db.jdbc.CallableStatementSapDB.registerOutParameter(CallableStatementSapDB.java:708)
32)

将输出参数的类型更改为原始类型可以很好地工作,因此自定义类型必须存在一些问题。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我在HANA(带有本地VM上的应用程序的Express Edition 2)上创建了以下过程:

创建过程MYDB.UNIVERSITY.TestProc(out_students MYDB.UNIVERSITY.TT_STUDENTS)
 语言SQLSCRIPT SQL安全调用程序读取SQL数据为
 开始
   out_students =来自MYDB.UNIVERSITY.STUDENT的SELECT NAME,FIRST_NAME和SEMESTERS;
 END; 

现在,我想调用它并使用JDBC获得参数" out_students"的结果。 据我所知,我可以使用" CallableStatement"类调用过程,并使用其" registerOutParameter"方法在特定位置注册输出参数。 这是相关的代码段:

 CallableStatement stmt = connection.prepareCall(" {CALL MYDB.UNIVERSITY.TestProc(?)}");;
 stmt.registerOutParameter(1,Types.STRUCT," MYDB.UNIVERSITY.TT_STUDENTS");
 stmt.execute(); 

但是,出现以下错误:

查询失败:SAP DBTech JDBC:无效的参数索引:1
com.sap.db.jdbc.exceptions.JDBCDriverException:SAP DBTech JDBC:无效的参数索引:1
com.sap.db.jdbc.exceptions.SQLExceptionSapDB.newInstance(SQLExceptionSapDB.java:26)
处的com.sap.db.jdbc.exceptions.SQLExceptionSapDB._newInstance(SQLExceptionSapDB.java:191)
HANAConnector.main(HANAConnector.java :)上的sap.db.jdbc.PreparedStatementSapDB._registerOutParameter(PreparedStatementSapDB.java:2357)
在com.sap.db.jdbc.CallableStatementSapDB.registerOutParameter(CallableStatementSapDB.java:708)
32)

将输出参数的类型更改为原始类型可以很好地工作,因此自定义类型必须存在一些问题。

付费偷看设置
发送
3条回答
jovirus
1楼 · 2020-09-12 10:45.采纳回答

表键入的参数映射到JDBC结果集,而不是JDBC输出参数。

一个例子可能像这样:

 CallableStatement stmt = connection.prepareCall(" {CALL getusers(?,?)}"));
 布尔moreResults = stmt.execute();
 while(moreResults){
     ResultSet rs = stmt.getResultSet();
     Utils.printResultSetData(rs); //这只是一个实用函数,用于打印结果集
     rs.close();
     moreResults = stmt.getMoreResults();
 }
 stmt.close();
 
ZJXianG
2楼-- · 2020-09-12 10:30

嗨, Luca Toldo

该实用程序功能只是我所需要的 快速编写,以便为我的测试/调试目的提供可读的输出。 由于我并不为那段代码感到特别自豪(甚至还没有半断 )我不会在这里放置它。

无论如何我都会回复您的电子邮件...

干杯

当学会了学习
3楼-- · 2020-09-12 10:43

嗨,你能分享吗

 Utils.printResultSetData(rs)

一周热门 更多>

点击此处---> EasySAP.com 一起学习S4 HANA ...

相关问答