[英]Array in IN() clause oracle PLSQL
I am passing String array(plcListchar) to Stored Procedure, i would like to use this String array in IN() clause. 我将String数组(plcListchar)传递给Stored Procedure,我想在IN()子句中使用这个String数组。
i can not use plcListchar directly in IN() clause. 我不能直接在IN()子句中使用plcListchar。 Let me show how i am crating plcListchar string array in JAVA.
让我展示一下我是如何在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);
for crating CHAR_ARRAY, 用于装箱CHAR_ARRAY,
create or replace type CHAR_ARRAY as table of varchar2;
i want use plcListchar in IN clause. 我想在IN子句中使用plcListchar。 the following is my Stored Procedure.
以下是我的存储过程。
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;
Could you please suggest me how to use, if you like to suggest any other logic, it is great. 你能否建议我如何使用,如果你想提出任何其他逻辑,那就太好了。
Assuming that your collection is defined in SQL, not just in PL/SQL, you can use the TABLE
operator (the definition you posted isn't syntactically valid-- you'd need to specify a length for the VARCHAR2
) 假设您的集合是在SQL中定义的,而不仅仅是在PL / SQL中定义,您可以使用
TABLE
运算符(您发布的定义在语法上无效 - 您需要为VARCHAR2
指定长度)
AND p.plc_status IN (SELECT column_value
FROM TABLE( plcListchar ))
Since I don't have your tables, an example using the SCOTT
schema 由于我没有您的表,因此使用
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.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.