Как я могу получить значение массива внутри массива для цикла ORACLE

Может кто-нибудь помочь мне, как я могу получить значение массива внутри массива для цикла ORACLE. Это пример в массиве PARAMETER. Я хочу получить значение массива массива [3] в "ID" и VALUE ID "EMP01658".

Массив ( [1] => DC0001 [2] => DC0002 [3] => Массив ( [ID] => EMP01658))

Это мой PL SQL CODE;

- это мой пакет глобальных переменных

CREATE OR REPLACE PACKAGE PKG_GLB_VARIABLES 
IS 

  TYPE refcursor        IS REF CURSOR;                        
  TYPE val_Array        IS TABLE OF VARCHAR2(3000) INDEX BY BINARY_INTEGER;
END;

- Это моя процедура

CREATE OR REPLACE PROCEDURE Proc_Array(
    param_Array     IN pkg_glb_variables.val_Array
)
IS

BEGIN
    for i in 1 .. param_Array.count
      loop
        DBMS_OUTPUT.put_line('aRRay('||i||') :'||param_Array(i));

        IF param_Array(i)='Array' THEN
        DBMS_OUTPUT.put_line('UY MAY ISA PANG ARRAY!');
           for i_2 in 1 .. param_Array(i).count
             loop
                DBMS_OUTPUT.put_line('aRRay('||i_2||') :'||param_Array(i_2));
             end loop;     
        END IF;
      end loop;  


END;

Спасибо.:)

1 ответ

Решение

VARCHAR2 отличается от массива (коллекция или таблица PL/SQL) и не может быть проиндексирован как таковой. Вам нужно использовать функции String Oracle. Вот пример для распечатки каждого символа каждого элемента массива varchar2:

CREATE OR REPLACE PROCEDURE Proc_Array(
    param_Array     IN pkg_glb_variables.val_Array
)
IS
vElement VARCHAR2(3000);
vLength  PLS_INTEGER;

BEGIN
    for i in 1 .. param_Array.count
      loop
        DBMS_OUTPUT.put_line('aRRay('||i||') :'||param_Array(i));

        vElement := param_array(i);
        vLength  := length(vElement);

           for i_2 in 1 .. vLength
             loop
                DBMS_OUTPUT.put_line('aRRay('||i_2||') :'||
                           substr(vElement,i_2,1) );
             end loop;     
      end loop;  
END;

Тест для вызова процедуры:

declare
a   pkg_glb_variables.val_Array;
begin
  a(1) := 'HELLO';
  a(2) := 'goodbye';
  proc_array ( a );
end;

Результирующий dbms_output:

my output - aRRay(1) :HELLO
my output - aRRay(1) :H
my output - aRRay(2) :E
my output - aRRay(3) :L
my output - aRRay(4) :L
my output - aRRay(5) :O
my output - aRRay(2) :goodbye
my output - aRRay(1) :g
my output - aRRay(2) :o
my output - aRRay(3) :o
my output - aRRay(4) :d
my output - aRRay(5) :b
my output - aRRay(6) :y
my output - aRRay(7) :e
Другие вопросы по тегам