如何通过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中的单个值。
答案 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 );