获取关联数组的关键和值

时间:2014-11-27 16:22:29

标签: oracle collections plsql

我的问题是我想从一个assosiative数组获得键和值,但我只能找到如何从键中获取值。这就是我发现的:

DECLARE
 TYPE assoc_array IS TABLE OF VARCHAR2(30)
 INDEX BY VARCHAR2(30);

 state_array assoc_array;
BEGIN
  state_array('Alaska') := 'Juneau';
  state_array('California') := 'Sacramento';

  dbms_output.put_line(state_array('Alaska'));
  dbms_output.put_line(state_array('California'));

END;

这打印了朱诺和萨克拉门托,但我想要这样的东西:

DECLARE
 TYPE assoc_array IS TABLE OF VARCHAR2(30)
 INDEX BY VARCHAR2(30);

 state_array assoc_array;
BEGIN
  state_array('Alaska') := 'Juneau';
  state_array('California') := 'Sacramento';

    for x in 1..state_array.count loop
    dbms_output.put_line(state_array(x).key || state_array(x).value);
    end loop;
END;

这可能吗?在此先感谢!!

2 个答案:

答案 0 :(得分:10)

实际上有一种方法,请考虑下面的代码

declare
   type assoc_array is table of varchar2(30) index by varchar2(30);

   state_array assoc_array;
   l_idx varchar2(30);
begin
   state_array('Alaska') := 'Juneau';
   state_array('California') := 'Sacramento';

   l_idx := state_array.first;
   while (l_idx is not null) loop
      dbms_output.put_line('Key = ' || l_idx || ':Value = ' || state_array(l_idx));
      l_idx := state_array.next(l_idx);
   end loop;
end;

输出

Key = Alaska:Value = Juneau
Key = California:Value = Sacramento

答案 1 :(得分:-1)

您无法使用关联数组执行此操作。因为,见下文。

DECLARE
 TYPE assoc_array IS TABLE OF VARCHAR2(30)
 INDEX BY VARCHAR2(30);

 state_array assoc_array;
BEGIN
  state_array('Alaska') := 'Juneau';
  state_array('California') := 'Sacramento';

    for x in 1..state_array.count loop
    dbms_output.put_line('x ='||x);
    end loop;
END;

会打印出来 x = 1 x = 2

oracle无法知道x = 1 =阿拉斯加。

你应该使用二进制数组来做这样的事情。