0

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

编码:

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..但是当我通过变量传递相同的字符串时,它将整个值视为可变数组中的单个值。

4

2 回答 2

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   );
于 2013-07-30T15:14:22.940 回答
0

您需要对您的输入参数进行子串化(基于,),然后执行类似这篇文章的操作(例如调用EXTEND();then ary(count)= value)。只要输入参数中仍有一些值,就继续扩展和添加

于 2013-07-30T14:24:38.363 回答