【问题标题】:adding numbers to same index in associative arrays plsql将数字添加到关联数组plsql中的相同索引
【发布时间】:2015-05-18 13:09:45
【问题描述】:

我正在尝试将几个连续数字添加到 PL/SQL (Oracle) 中关联数组中的同一索引中。

我已将关联数组定义如下:

TYPE map_varchar IS TABLE OF NUMBER(30) INDEX BY VARCHAR2(30);
l map_varchar;

我有一个 XML clob,我循环并获得一个描述(varchar)和数量(数字)值。假设我有一个描述:'A' 和以下值 3,5,6

我想将其映射为:'A' > 14

 for r in (SELECT t.* 
  FROM XMLTABLE('*'
    PASSING xmltype(rec1.xml).
    EXTRACT('/ProductS/')
    COLUMNS description VARCHAR2(30) PATH 'some_xml_tag',
    amount NUMBER(30) PATH '_another_xml_tag') t)
LOOP
l(r.description) := l(r.description) + r.amount;
dbms_output.put_line('v_modifier_value_p: ' || r.description || ' amount: ' || r.saving);

END LOOP;

我正在尝试上述方法:

  l(r.description) := l(r.description) + r.amount;

不工作。

如何在 PLSQL 中做到这一点?

【问题讨论】:

    标签: sql oracle plsql


    【解决方案1】:

    l(r.description) 显然需要初始化。所以我添加了这样的内容:

    if l.exists(r.description) then
        null;
      else
        l(r.description) := 0;
      end if;
    

    现在可以了。

    【讨论】:

      【解决方案2】:

      替换语句

      l(r.description) := l(r.description) + r.amount;
      

      以下

      if l.exists(r.description) then
        l(r.description) := l(r.description) + r.amount;
      else
        l(r.description) := r.amount;
      end if;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-30
        • 1970-01-01
        • 2012-01-23
        • 2021-11-27
        • 1970-01-01
        相关资源
        最近更新 更多