gpt4 book ai didi

java - 将大型字符串数组作为 VarChar2 传递到 SQL 中

转载 作者:行者123 更新时间:2023-12-01 11:37:15 26 4
gpt4 key购买 nike

我们的应用程序大量使用 SQL 函数。一个这样的函数利用了这种类型的大字符串变量:

public static boolean callSQL(Connection conn, String[] s)
throws DatabaseException
{
boolean result = false;
String query = "begin ? := "+qualProc("callSQL")+"(?); end;";
cs.registerOutParameter(1, Types.INTEGER);
**cs.setString(2, GeneralUtils.join(s,","));**
**cs.execute();**
if(cs.getInt(1) > 0)
result = true;
}catch(SQLException se){
se.printStackTrace();
throw new DatabaseException(se.getMessage());
}finally{
if(cs != null)
try{ cs.close(); }catch(SQLException e){}
}

return result;
}

注意:qualProc 是我们数据库的名称。出于安全原因,我在这里不使用真实姓名。

应用程序本身运行顺利,但是当它尝试执行 SQL 命令时,我们收到以下错误:

ORA-06532: Subscript outside of limit ORA-06512: at "XXXX.XX", line XXX ORA-06512: at line X

在包函数本身中,它使用如下所示的字符串:

  FUNCTION callSQL(s_tring IN VARCHAR2)
RETURN INTEGER IS

该字符串可以(并且已经)长于 VarChar2 的大小限制(根据此答案为 32768 字节 https://stackoverflow.com/a/186436/2188082 )。

一种选择是将我们的数组分成可管理的 block 并运行 SQL 函数,直到它处理整个字符串,但理想情况下我们希望通过 SQL 包更改来解决这个问题 - 有没有办法让 SQL 接受字符串这对于 VarChar2 来说太长了?

最佳答案

我建议您查看对 5198856 的回复,用于将字符串数组发送到 PL/SQL。

另一方面,您可以修改参数为 CLOB 的 PL/SQL 过程,而不是 VARCHAR2,后者限制为 32767 个字符,而 CLOB 类型则没有这种限制。

关于java - 将大型字符串数组作为 VarChar2 传递到 SQL 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29851906/

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