如何通过 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?

在 PL SQL 中使用 varray 作为常量

Oracle:PL/SQL 中查看值是不是存在的最快方法:列表、VARRAY 或临时表

我应该如何使用 jdbc 从 plsql 将 varray 发送到 java? [复制]

在 PL/SQL VARRAY 中使用 ROWTYPE 会产生编译错误

PL/SQL数组