当前位置: 首页 > 面试题库 >

数组在IN()子句中oracle PLSQL

严开宇
2023-03-14
问题内容

我将String数组(plcListchar)传递给存储过程,我想在IN()子句中使用此String数组。

我不能直接在IN()子句中使用plcListchar。让我展示一下我如何在JAVA中创建plcListchar字符串数组。

 String array[] = {"o", "l"}; 
 ArrayDescriptor des = ArrayDescriptor.createDescriptor("CHAR_ARRAY", con);
 ARRAY array_to_pass = new ARRAY(des,con,array);            
 callStmtProductSearch.setArray(4, array_to_pass);

用于创建CHAR_ARRAY,

create or replace type CHAR_ARRAY as table of varchar2;

我想在IN子句中使用plcListchar。以下是我的存储过程。

CREATE OR REPLACE PROCEDURE product_search(
            status IN varchar2, 
            plcList IN varchar2,
            i_culture_id IN number,
            plcListchar IN CHAR_ARRAY,
            status_name OUT  varchar2, 
            culture_code  OUT varchar2)
AS  
    CURSOR search_cursor IS
    SELECT p.status_name, p.culture_code
                FROM PRISM_ITEM_cultures@prism p
                WHERE p.publishable_flag=1 
                AND p.isroll =0 
                AND status = '-1'
                AND p.plc_status IN (   );
 BEGIN
           OPEN search_cursor;
           FETCH search_cursor INTO status_name, culture_code ;
           CLOSE search_cursor;
 END;

您能建议我如何使用吗,如果您想提出任何其他逻辑,那太好了。


问题答案:

假设您的集合是在SQL中定义的,而不仅仅是在PL / SQL中定义的,则可以使用TABLE运算符(发布的定义在语法上无效-您需要指定的长度VARCHAR2)

AND p.plc_status IN (SELECT column_value
                       FROM TABLE( plcListchar ))

由于我没有您的表格,因此使用SCOTT模式的示例

SQL> create type ename_tbl is table of varchar2(30);
  2  /

Type created.

SQL> ed
Wrote file afiedt.buf

  1  declare
  2    l_enames ename_tbl := ename_tbl( 'KING', 'SMITH' );
  3  begin
  4    for i in (select *
  5                from emp
  6               where ename in (select column_value
  7                                 from table( l_enames )))
  8    loop
  9      dbms_output.put_line( 'ENAME = ' || i.ename );
 10    end loop;
 11* end;
SQL> /
ENAME = KING
ENAME = SMITH

PL/SQL procedure successfully completed.


 类似资料:
  • 问题内容: 我的Mybatis中有一个查询,其中包含一个IN子句,该子句基本上是一组Id(整数) 我现在停留在如何将一个Integer数组传递给此IN子句上,以便它提取正确的记录。尝试通过将一个包含ID的String传递给IN子句,但这无法按预期工作。 下面的代码示例 Mybatis方法使用注释 询问 方法调用 这不起作用,当我调用mapper方法时,Mybatis引发错误 有什么建议吗 问题答案

  • 问题内容: 我想执行一个sqlite查询: 子句中的值需要从字符串数组中获取: 我该如何实现? 问题答案: 我相信一个简单的方法就可以解决问题:

  • 问题内容: 我正在尝试在数据库中查询产品ID数组中包含“ product_id”的记录。 该数组是多重选择输入()的发布结果,如下所示: 我想将该数组传递给SQL语句的“ IN”子句,例如: …但这是行不通的(错误:)。 一些帖子建议使用此函数以适合SQL的方式格式化数组: 如 … 这将导致以下查询: …以及此错误: 我究竟做错了什么? 任何帮助是极大的赞赏!如果需要,我可以澄清这个问题:) 问题

  • 问题内容: 我有三个表来定义用户: 我想创建一个对应用程序中的其他用户具有一定访问权限的中间层用户。为了确定已登录的用户可以访问哪些用户,我使用了如下子查询: 当前,我将子查询字符串存储在变量中,然后每次需要拉出用户列表时,将其动态插入到外部查询中。完成此操作后,我想到“最好只存储实际s 的字符串”。 因此,与其将其存储在变量中… …我实际上是执行查询并以这种方式存储结果… 然后,当我需要拉一小部

  • 主要内容:Oracle IN操作符介绍,Oracle IN运算符示例,以下是纠正/补充内容:在本教程中将学习如何使用Oracle 运算符来确定值是否与列表或子查询中的任何值相匹配。 Oracle IN操作符介绍 Oracle 运算符确定值是否匹配列表或子查询中的任何值。 注:子查询是嵌套在另一个查询中的查询,可通过在子查询教程中了解子查询用法。 确定表达式是否与值列表匹配的Oracle 运算符的语法如下所示: 并且表达式的语法与子查询匹配: 参数 在上面语法中,这里将介绍每个参数含义:

  • 问题内容: 我正在尝试在sqlalchemy中执行此查询 我想在执行时绑定列表。 问题答案: 怎么样 编辑 :没有ORM,它将是 需要两个参数,第一个是要检索的字段列表,第二个是条件。您可以通过(或)属性访问表对象上的所有字段。