Вы не упомянули, зачем вам здесь нужна коллекция.Если вы определили TYPE
и коллекцию как объекты схемы, можно выполнить простой запрос соединения, используя функции TABLE
, чтобы точно выполнить цикл for.
CREATE OR REPLACE
TYPE rec_numbers AS OBJECT
( digit NUMBER,
english VARCHAR2(10),
french VARCHAR2(10),
italian VARCHAR2(10) );
/
CREATE OR REPLACE TYPE tab_numbers AS
TABLE OF rec_numbers;
/
Код
SET SERVEROUTPUT ON
DECLARE
blk_num tab_numbers;
blk_num2 tab_numbers;
blk_num3 tab_numbers;
BEGIN
SELECT rec_numbers(1,'ONE',NULL,NULL) BULK COLLECT
INTO blk_num
FROM dual;
SELECT rec_numbers(1,NULL,'UN','UNO') BULK COLLECT
INTO blk_num2
FROM dual;
SELECT rec_numbers
( a.digit,
a.english,
COALESCE(b.french,a.french ),
COALESCE(b.italian,a.italian)
) BULK COLLECT
INTO blk_num3
FROM TABLE ( blk_num ) a
LEFT JOIN TABLE ( blk_num2 ) b
ON a.digit = b.digit;
blk_num := blk_num3;
for i in 1..blk_num.count
loop
dbms_output.put_line(blk_num(i).digit ||','||blk_num(i).english
||','||blk_num(i).french||','||blk_num(i).italian
);
END LOOP;
END;
/
Выход
1,ONE,UN,UNO
PL/SQL procedure successfully completed.
Демонстрация