如何通过PL / SQL中的VARRAY函数中的变量传递String值

时间:2013-07-30 14:07:30

标签: sql oracle plsql oracle10g plsqldeveloper

如何通过PL / SQL中的VARRAY函数中的变量传递String值。

编码:

create or replace
PROCEDURE dynamic_query_build
(
    vr_plan_sku_id     IN VARCHAR2
)
IS
  type plan_sku_id_array IS VARRAY(999) OF VARCHAR2(5000);
  plan_sku_id plan_sku_id_array;
  total integer;
  vrx_plan_sku_id VARCHAR2(3000);

BEGIN
  vrx_plan_sku_id:= replace(vr_plan_sku_id,',',chr(39)||','||chr(39));
  vrx_plan_sku_id:=chr(39)||vrx_plan_sku_id||chr(39);
  --plan_sku_id := plan_sku_id_array('Apple','Apple','Orange','Banana');
  dbms_output.put_line(vrx_plan_sku_id);
  plan_sku_id := plan_sku_id_array(vrx_plan_sku_id);

  total := plan_sku_id.count;
  dbms_output.put_line('Array count: 'total);

EXCEPTION
    WHEN OTHERS THEN
    raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
END dynamic_query_build;

执行:

set serveroutput on;
declare
vr_plan_sku_id varchar2(200) := 'Apple,Apple,Orange,Banana';
BEGIN
   dynamic_query_build(vr_plan_sku_id);
END;
/

我的输出:

数组计数:1

预期输出:

数组计数:4

说明: 当我传递字符串值,如“plan_sku_id_array('Apple','Apple','Orange','Banana')”然后我得到的计数值是4 ..但是当我通过变量传递相同的字符串时,它正在考虑整数值作为varray中的单个值。

2 个答案:

答案 0 :(得分:0)

您需要对输入参数进行子字符串(基于,),然后执行this post之类的操作(例如,调用EXTEND();然后调用ary(count)= value)。只要输入参数中仍有一些值

,请继续扩展和添加

答案 1 :(得分:0)

可以像下面给出的那样传递你的值字符串。这将在不同的行中转换整个逗号分隔的字符串,您可以在VARRAY中运行循环并存储变量。

 SELECT trim(x.column_value.extract('e/text()')) COLUMNS
 from t t, table (xmlsequence(xmltype('<e><e>' || replace(valuestring,':','</e><e>')||  
 '</e></e>').extract('e/e'))) x   );