sql - 数组在IN()子句中oracle PLSQL

标签 sql oracle stored-procedures plsql

我将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.

关于sql - 数组在IN()子句中oracle PLSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15515772/

相关文章:

sql - 此更新查询在有连接时如何设置总和

python - 从 python 中的字典创建 postgres 表

sql - 如何处理同一列中多种日期格式的 Snowflake to_date 转换问题?

sql - Oracle SQl Dev,如何计算两个日期之间的工作日数

php - 防止在 PHP 中的高级 MySQL 存储过程语句中注入(inject)

sql - .sql 文件的存储过程

java - 处理 java.lang.NullPointerException 错误

c - Oracle 11g -> Oracle 客户端 -> Pro*C 程序 double 表示

sql - 如何检测存储过程是否已经存在

oracle - 中止 PL/SQL 程序