我将字符串数组(plcListchar)传递给存储过程,我想在IN()子句中使用此字符串数组。
我不能直接在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;
型
请你建议我如何使用,如果你喜欢建议任何其他逻辑,这是伟大的。
1条答案
按热度按时间zpgglvta1#
假设你的集合是在SQL中定义的,而不仅仅是在PL/SQL中,你可以使用
TABLE
运算符(你发布的定义在语法上是无效的--你需要为VARCHAR2
指定一个长度)字符串
由于我没有您的表,因此使用
SCOTT
模式的示例型
注意事项:代码create type_tbl是varchar 2(30)的表;在Oracle中创建一个新的用户定义类型(UDT),名为_tbl。这个UDT是一个varchar 2(30)列的表,这意味着它可以存储一个字符串集合,每个字符串的长度最多为30字节。