Je passe un tableau de chaînes (plcListchar) à la procédure stockée, je voudrais utiliser ce tableau de chaînes dans la clause IN ().
je ne peux pas utiliser plcListchar directement dans la clause IN (). Permettez-moi de montrer comment je crée un tableau de chaînes plcListchar en Java.
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);
pour la mise en caisse CHAR_ARRAY,
create or replace type CHAR_ARRAY as table of varchar2;
je veux utiliser plcListchar dans la clause IN. ce qui suit est ma procédure stockée.
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;
Pourriez-vous s'il vous plaît me suggérer comment utiliser, si vous aimez suggérer une autre logique, c'est génial.
En supposant que votre collection est définie en SQL, pas seulement en PL/SQL, vous pouvez utiliser l'opérateur TABLE
(la définition que vous avez publiée n'est pas syntaxiquement valide - vous devez spécifier une longueur pour le VARCHAR2
)
AND p.plc_status IN (SELECT column_value
FROM TABLE( plcListchar ))
Puisque je n'ai pas vos tables, un exemple utilisant le schéma 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.