У меня есть несколько пользовательских типов оракула, объявленных так:
create type S_TYPE as table of VARCHAR2(4000);
CREATE TYPE "OBJ_ORDER_ADD" AS object (
ADD_TYPE NUMBER,
ADDITION s_type
-- other fields not represented here for brevity
);
create type ARRAY_ORDER_ADD as table of OBJ_ORDER_ADD;
Это означает, что я могу создавать экземпляры ARRAY_ORDER_ADD
, которые выглядят так:
add_type | addition
---------------------
10 | ['a', 'b']
20 | ['x', 'y', 'z']
Iнеобходимо создать FUNCTION
, который может объединить данные, содержащиеся в соответствующей таблице order_add
, где столбец addition
равен VARCHAR
.После объединения вышеприведенного объекта в пустую таблицу я хочу, чтобы таблица содержала:
add_type | addition
-------------------
10 | 'a'
10 | 'b'
20 | 'x'
20 | 'y'
20 | 'z'
Я знаю, что для этого можно использовать тривиальное решение с двумя вложенными циклами, но это решение дает многопереключений контекста SQL / PLSQL, и я бы хотел их избежать.
Моя идеальная цель - сделать это с помощью одного MERGE
запроса.
Возможно ли это?
Я пробовал несколько комбинаций SELECT ... FROM TABLE(myRecord)
и пыталсякаким-то образом сделать декартово произведение каждой записи с TABLE(myRecord.addition)
, но я просто не могу собрать его правильно.