关联数组问题

Associative array issue

我创建了一个关联数组,我知道它可以使用不同的书写方式,但只需要提示如何使它起作用。目前,当我编译这个块时,我找不到任何数据。谢谢!

    DECLARE
        TYPE type_state IS TABLE OF VARCHAR(50)
        INDEX BY VARCHAR2(50);
        tbl_state type_state;
        lv_statecity1_txt VARCHAR2(30):= 'TAMPA';
        lv_statecity2_txt VARCHAR2(30):= 'ATLANTA';
        lv_statecity3_txt VARCHAR2(30):= 'NYC';
        lv_cnt_num NUMBER(5) := 0;
    BEGIN
        tbl_state('FLORIDA') := lv_statecity1_txt;
        tbl_state('GEORGIA') := lv_statecity2_txt;
        tbl_state('New_York') := lv_statecity3_txt;
        FOR i IN 1..tbl_state.count loop
            IF tbl_state(i) IS NOT NULL THEN
              LV_CNT_NUM := LV_CNT_NUM + 1;
              dbms_output.put_line(tbl_state(i));
            END IF;
        END LOOP;
        dbms_output.put_line('That''s it folks');
    END;

tbl_state 是由 strings 索引的 table 字符串 - 传入索引值 1、2、3(数字)将不起作用。

确实数组对仍然是有序的(第一、第二等),但在循环中访问它们有点复杂。您将需要一个 WHILE 循环,并且必须将索引(我保留名称 i 以尽可能匹配您的代码)声明为与数组中的键具有相同的数据类型和长度。

DECLARE
        TYPE type_state IS TABLE OF VARCHAR(50)
        INDEX BY VARCHAR2(50);
        tbl_state type_state;
        lv_statecity1_txt VARCHAR2(30):= 'TAMPA';
        lv_statecity2_txt VARCHAR2(30):= 'ATLANTA';
        lv_statecity3_txt VARCHAR2(30):= 'NYC';
        lv_cnt_num NUMBER(5) := 0;                 --  WHAT IS THIS FOR? NEEDED??
        i varchar2(50);                            --  Notice this line
    BEGIN
        tbl_state('FLORIDA') := lv_statecity1_txt;
        tbl_state('GEORGIA') := lv_statecity2_txt;
        tbl_state('New_York') := lv_statecity3_txt;
        i := tbl_state.first;                      --  And this line
        while (i is not null) loop                 --  And this one
              LV_CNT_NUM := LV_CNT_NUM + 1;
              dbms_output.put_line(tbl_state(i));
              i := tbl_state.next(i);              --  And this one
        END LOOP;
        dbms_output.put_line('That''s it folks');
    END;
/