2013-03-20 33 views
14

String配列(plcListchar)をStored Procedureに渡していますが、このString配列をIN句に使用したいと考えています。IN()句の配列oracle PLSQL

私は、IN()節で直接plcListcharを使用することはできません。 JAVAでplcListchar文字列配列をどのように作成しているかを見せてください。 CHAR_ARRAY、

create or replace type CHAR_ARRAY as table of varchar2; 

をクレートため

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); 

私は、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 [email protected] 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

を使用した例は、私はこれを試してみました:。 'とp.plc_status(IN XをSELECT *TABLEのx AS(plcListchar))FROM; ' とOracleが ' PLS-00642提起:SQLで許可されていない地元のコレクション型は、私も解決策を探しています をstatements'。 – Rachcha

答えて

21

あなたのコレクションがPL/SQLだけでなく、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. 
+0

こんにちは!私は似たようなことを試みましたが、エラーがありました。私は質問を掲示した:http://stackoverflow.com/questions/15516515/using-nested-table-variables-in-sql-queries-inside-anonymous-blocks-or-stored-pr。どんな助けでも大歓迎です。 – Rachcha