Как правило, вы должны создать MAP MEMBER FUNCTION
для записи. Я не думаю, что это может быть основано на TABLE_A%ROWTYPE
, вы должны определить тип вручную.
См. Этот пример. Объект STATIC_ROUTE
имеет 6 атрибутов, а ключ IP_ADDRESS,NETWORK_MASK,NEXT_HOP
.
CREATE OR REPLACE TYPE STATIC_ROUTE AS OBJECT (
ROUTE_INDEX NUMBER,
IP_ADDRESS VARCHAR2(15),
NETWORK_MASK VARCHAR2(15),
NEXT_HOP VARCHAR2(15),
REDISTRIBUTE VARCHAR2(5),
ROUTE_METRIC NUMBER,
MAP MEMBER FUNCTION getId RETURN VARCHAR2)
/
CREATE OR REPLACE TYPE BODY STATIC_ROUTE IS
MAP MEMBER FUNCTION getId RETURN VARCHAR2 IS
BEGIN
RETURN SELF.IP_ADDRESS||'-'||SELF.NETWORK_MASK||'-'||SELF.NEXT_HOP;
END;
END;
/
CREATE OR REPLACE TYPE STATIC_ROUTES AS TABLE OF STATIC_ROUTE
/
Теперь вы можете использовать функцию SET
для переменных STATIC_ROUTES.
Однако вы должны попытаться получить результат в одном заявлении SLQ. Это может быть похоже на это:
WITH t AS (
SELECT DISTINCT
id_col_1, id_col_2, id_col_3, id_col_4, id_col_5,
FIRST_VALUE(col_6) OVER (PARTITION BY id_col_1, id_col_2, id_col_3, id_col_4, id_col_5 ORDER BY ROWID) col_6,
FIRST_VALUE(col_7) OVER (PARTITION BY id_col_1, id_col_2, id_col_3, id_col_4, id_col_5 ORDER BY ROWID) col_7,
FIRST_VALUE(col_8) OVER (PARTITION BY id_col_1, id_col_2, id_col_3, id_col_4, id_col_5 ORDER BY ROWID) col_8,
...
FIRST_VALUE(col_30) OVER (PARTITION BY id_col_1, id_col_2, id_col_3, id_col_4, id_col_5 ORDER BY ROWID) col_30
FROM TABLE_A)
SELECT LIST_A_TYPE(id_col_1, id_col_2, id_col_3, id_col_4, id_col_5, id_col_6, ... col_30)
BULK COLLECT INTO l_list_a
FROM t;