调用存储过程传递表类型参数

Posted

技术标签:

【中文标题】调用存储过程传递表类型参数【英文标题】:Call stored procedure passing table type argument 【发布时间】:2018-01-31 11:57:26 【问题描述】:

我在HANA数据库中创建了这个存储过程,它有两个参数,一个是表类型,另一个是varchar

CREATE PROCEDURE UPDATE_GSTR(IN p_Input_Values "GSTR11".p_Input_Values , IN p_TRANS_ID VARCHAR(100))

现在我想用 Java 调用这个过程,我写了这样的东西。

Connection dbConnection = null;
CallableStatement callableStatement = null;

String storedProcedure = "call UPDATE_GSTR(?,?)";

dbConnection = jdbc.getDataSource().getConnection();
callableStatement = dbConnection.prepareCall(storedProcedure);

callableStatement.setString(1, "");
callableStatement.setString(2, "");

// execute store procedure
callableStatement.executeUpdate();

有人可以告诉我如何在调用此存储过程时将对象作为表实体传递到参数中吗?

【问题讨论】:

IN 是一种数据类型吗?在调用方法的任何地方传递这种类型的值。 【参考方案1】:

无法在 SAP HANA 之外创建表类型输入参数。 对于客户端应用程序,仍然使用表类型参数的一种方法是使用与参数表具有相同结构的临时表。

然后,您的 JAVA 应用程序将首先填充临时表并在第二步中调用该过程

String storedProcedure = "call UPDATE_GSTR("<temp_table_name>",?)";

【讨论】:

感谢您的评论。实现这个概念的目的是将负载从java转移到数据库并提高性能,但似乎没有办法做到这一点。 不确定我明白你的意思。无论采用哪种方式传输表类型参数的内容,都必须以某种方式构建表。构建一个用于将数据传递到过程中的服务器端临时表不太方便,但也没有那么多工作要做。

以上是关于调用存储过程传递表类型参数的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 存储过程参数 - 不同类型

oracle中调用存储过程时传递参数值的3种方式。。

如何在没有临时表的情况下从另一个存储过程调用存储过程(带参数)

带有 PL SQL 表类型参数的 Oracle 存储过程的 JDBC 调用

带有表类型参数的存储过程返回数据但 SqlDataAdapter 不会填充

java 实现往oracle存储过程中传递array数组类型的参数