복붙노트

[SQL] IN의 배열 () 절 오라클 PLSQL

SQL

IN의 배열 () 절 오라클 PLSQL

내가 저장 프로 시저에 문자열 배열 (plcListchar)를 통과하고, 내가 IN () 절에이 문자열 배열을 사용하고 싶습니다.

내가 IN () 절에 직접 plcListchar을 사용할 수 없습니다. 난 자바에 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 배열을 만들기위한,

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;

당신이 다른 논리를 제시하고자하는 경우, 사용하는 방법을 나에게 제안 시겠어요, 그것은 중대하다.

해결법

  1. ==============================

    1.컬렉션은 PL / SQL에서뿐 아니라, SQL에 정의되어 있음을 가정하면, 테이블 연산자 (당신이 구문 당신은 VARCHAR2의 길이를 지정해야 할 것 valid--되지 게시 된 정의)를 사용할 수 있습니다

    컬렉션은 PL / SQL에서뿐 아니라, SQL에 정의되어 있음을 가정하면, 테이블 연산자 (당신이 구문 당신은 VARCHAR2의 길이를 지정해야 할 것 valid--되지 게시 된 정의)를 사용할 수 있습니다

    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.
    
  2. from https://stackoverflow.com/questions/15515772/array-in-in-clause-oracle-plsql by cc-by-sa and MIT license