【发布时间】:2015-03-27 20:57:23
【问题描述】:
ArrayDescriptor arrayDescriptor =
ArrayDescriptor.createDescriptor("NUMBER_ARRAY", conn);
if (parameter != null) {
ARRAY oracleArray =
new ARRAY(arrayDescriptor, conn, intList.toArray());
ps.setArray(i, oracleArray);
}
else {
ps.setNull(i, Types.ARRAY, "NUMBER_ARRAY");
}
在上面的代码中,我试图将 oracleArray 设置为 null。它不会抛出任何异常。但我猜甲骨文并不认为它是空的。传入空值的方法是什么,我的意思是将一个列表设置为空值,orcle DB 可以将其视为NUMBER_ARRAY(null),稍后将传递给存储过程(SP)。 SP 准备好获取一个空列表。如果它是一个空列表,它什么也不返回。如果它不是一个空列表,它将给出结果。这是一个有效的场景。
【问题讨论】:
-
您希望数据库中的 Oracle 集合本身为空,还是作为一个元素的集合,其中该元素为空?
-
基本上我希望 oracle 将我的参数作为 NUMBER_ARRAY(null)。
-
我想将一个空列表从 java 传递到 oracle 存储过程,并且该 proc 应该将其作为 NUMBER_ARRAY(null).. 我已经通过传入 NUMBER_ARRAY(null) 运行存储过程并且可以工作美好的。但是当从 java 调用该 SP 时传入 null 列表不起作用。我知道我们可以将 int 设置为 null 作为 ps.setNull(i, int),但不确定我们如何为 java 中的 BigInteger 列表做些什么。对于您的问题,我希望 oracle 集合本身为空。 @rgettman
-
@Raj:你在自相矛盾。你说如果你通过你的存储过程
NUMBER_ARRAY(null)它工作正常,但你也说'你希望你的集合本身为空'。NUMBER_ARRAY(null)不是一个空集合,它是一个包含单个NULL值的 1 元素集合。请明确说明您想要什么。 -
@LukeWoodward:对不起我的发言。我没有意识到 NUMBER_ARRAY(null) 相当于包含单个 null 的集合的 1 个元素。我的问题是我想传入一个没有添加任何值的列表。所以我的理解是我需要传入一个 1 元素为 null 的列表才能使这个场景生效。
标签: java oracle stored-procedures prepared-statement