如何通过 PL/SQL 中的 VARRAY 函数中的变量传递字符串值
Posted
技术标签:
【中文标题】如何通过 PL/SQL 中的 VARRAY 函数中的变量传递字符串值【英文标题】:How to pass String values through variable in VARRAY functions in PL/SQL 【发布时间】:2013-07-30 14:07:30 【问题描述】:如何在 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 ..但是当我通过变量传递相同的字符串时,它正在考虑整个值作为可变数组中的单个值。
【问题讨论】:
这真的和你的previous question有很大不同吗?您不能对此进行澄清,而不是再次问同样的问题吗? 嗨亚历克斯-这是同样的问题,但在这里我想问人们,任何功能都可以以任何方式实现这种情况...... 【参考方案1】:您需要对输入参数进行子串化(基于,
),然后执行this post 之类的操作(例如,调用EXTEND();
,然后调用ary(count)= value
)。只要您的输入参数仍有一些价值,就继续扩展和添加
【讨论】:
【参考方案2】:可以像下面给出的那样传递你的值字符串。这会将整个逗号分隔的字符串转换为不同的行,您可以运行循环并将变量存储在 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 );
【讨论】:
你是说从表中获取记录?以上是关于如何通过 PL/SQL 中的 VARRAY 函数中的变量传递字符串值的主要内容,如果未能解决你的问题,请参考以下文章
Oracle PL/SQL:如何从 VARRAY 的 REF 中进行 DEREF?
Oracle:PL/SQL 中查看值是不是存在的最快方法:列表、VARRAY 或临时表
我应该如何使用 jdbc 从 plsql 将 varray 发送到 java? [复制]