gpt4 book ai didi

带有 %rowtype 参数的 java 调用 oracle 过程

转载 作者:行者123 更新时间:2023-11-30 09:14:56 24 4
gpt4 key购买 nike

我得到了一个带有 in out 参数 %rowtype 的 oracle 过程,例如:

CREATE OR REPLACE PROCEDURE cleansing(
io_user IN OUT USER%rowtype
)
IS
BEGIN
--some pl/sql code

END cleansing;

USER 是一个超过100 列 的表,我想用Java 调用程序。我无法更改程序,因为它们已被其他项目使用。我无法将过程添加到数据库,因为我没有这样做的权限。我用谷歌搜索,但找不到处理这个问题的好方法。我想做的是:1.传递参数。2.获取参数。一些java演示代码:

String sql = "{call cleansing(?)}";
try {
dbConnection = getDBConnection();
callableStatement = dbConnection.prepareCall(sql);
callableStatement.setXXX()//I don't know
callableStatement.registerOUTParameter(1, //I don't know the type.);

谁能帮助我并提供一些演示代码?没有改变数据库和java的in out参数映射

最佳答案

这是可能的,但并不是很简单。您必须在运行时创建 USER%ROWTYPE 类型的东西,并使用它来调用您的存储过程。看看here了解详情。

要同时获得输出值,您必须按照 Sumit 的评论做一些额外的事情。基本上,在您的过程调用之后,您打开一个游标,从 USER 参数中选择相关数据。

于是得到如下数据库语句(伪代码):

string sql =
"declare
user_param user%rowtype;
begin
-- Set necessary parameters
user_param.col0 := :p0In;
user_param.col1 := :p1In;
...

-- Call procedure.
cleansing(io_user => user_param);

-- Read necessary output values into cursor.
open :pOut for select user_param.col99 as col99
user_param.col98 as col98
...
from dual;
end;"

你以通常的方式调用整个语句,但你注册了一个游标输出参数(不幸的是,Java 对我来说是很久以前的事了,所以我不确定确切的语法)。

callableStatement.registerOutParameter("pOut", OracleTypes.CURSOR);
...
callableStatement.execute();
...
ResultSet rs = (ResultSet) callableStatement.getObject("pOut");
// Read from result set.

编辑:我把它变成了 blogpost .代码示例在 C# 中,但思想是相同的。

关于带有 %rowtype 参数的 java 调用 oracle 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20189282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com