暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 使用IN子句传递数组以将对象视为绑定变量

askTom 2017-09-12
912

问题描述

你好,汤姆,

我有一个应用程序,在Jdeveloper 11.1.2.4.0中设计。在这个应用程序中,我有一个基于其查询的具有许多员工id的视图对象。然后,我调用一个函数,该函数使用这些id并基于某些逻辑返回是/否答案。如果是,那么我将所述员工id放入一个数组中,在调用函数的方法完成后,等等,我组成一个所述员工id的数组。我已经声明数组如下,并调用视图对象,我需要接受数组作为绑定变量。
ArrayList    empList = null;

empList = new ArrayList();

while (hasNext())

call function.....

if(yes)
  empList.add(empID)

ViewObjectImpl voImpl = (ViewObjectImpl) appMod.findViewObject(empWithYes);
voImpl.setNamedWhereClausePram("EmpIdsArray", empList.toArray());
voImpl.executeQuery;


在调用的视图对象中,我有一个定义的绑定变量,名为 = EmpIdsArray与数组类型。SQL语句执行以下操作:

Select employeeName
From   employees
Where  employees.employee_id IN (:EmpIdsArray);


我已经验证了合成数组正在按预期填充。但是,当我尝试执行应用程序时,我收到以下错误,并且不知所措,因为我发现的每个示例都在实现风格或我对它们的理解方面略有偏离。

Error: oracle.jbo.JboException : Cannot insert/update Array with out context information.

我试图用ColumnType = EmployeeId和ElemType = BigDecimal在属性管理器中定义绑定变量,但没有成功。





专家解答

这里有一些关于信息来回传递的好例子

https://asktom.oracle.com/pls/asktom/asktom.search?tag=passing-an-array-from-java-to-plsql

https://asktom.oracle.com/pls/asktom/asktom.search?tag=passing-arrays-into-plsql-stored-procedures

http://www.oracle.com/technetwork/issue-archive/o60asktom-1870725.html

然后,当涉及到通过 “IN” 使用数组时,您可以使用表运算符将数组强制转换为行源,例如

SQL> create table t ( x int );

Table created.

SQL>
SQL> insert into t values (1);

1 row created.

SQL> insert into t values (2);

1 row created.

SQL> insert into t values (3);

1 row created.

SQL> insert into t values (4);

1 row created.

SQL> insert into t values (5);

1 row created.

SQL>
SQL> create or replace
  2  type my_num_list is table of number;
  3  /

Type created.

SQL>
SQL> set serverout on
SQL> declare
  2    n my_num_list := my_num_list(2,3,4);
  3  begin
  4    for i in (
  5      select *
  6      from   t
  7      where  x in ( select column_value from table(n) )
  8    )
  9    loop
 10      dbms_output.put_line(i.x);
 11    end loop;
 12  end;
 13  /
2
3
4

PL/SQL procedure successfully completed.


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论