Использование CAST
и COLLECT
:
Установка Oracle :
CREATE TYPE risks IS TABLE OF NUMBER;
/
CREATE TABLE risk_table ( risk, other_column_name, parent_id ) AS
SELECT 1, 1, 1 FROM DUAL UNION ALL
SELECT 3, 2, 1 FROM DUAL UNION ALL
SELECT 1, 4, 1 FROM DUAL UNION ALL
SELECT 2, 2, 1 FROM DUAL UNION ALL
SELECT 3, 1, 1 FROM DUAL UNION ALL
SELECT 3, 2, 1 FROM DUAL UNION ALL
SELECT 4, 5, 2 FROM DUAL;
PL / SQL :
DECLARE
o_risks risks;
o_other_column_name RISK_TABLE.OTHER_COLUMN_NAME%TYPE;
any_id RISK_TABLE.PARENT_ID%TYPE := 1;
BEGIN
SELECT CAST( COLLECT( DISTINCT risk ) AS risks ),
MAX( other_column_name )
INTO o_risks, o_other_column_name
FROM risk_table
WHERE parent_id = any_id;
DBMS_OUTPUT.PUT_LINE( 'Max other column name: ' || o_other_column_name );
FOR i IN 1 .. o_risks.COUNT LOOP
DBMS_OUTPUT.PUT_LINE( 'Risk ' || i || ': ' || o_risks(i) );
END LOOP;
END;
/
выход
Max other column name: 4
Risk 1: 1
Risk 2: 2
Risk 3: 3
дБ <> скрипка здесь
Если вы используете версию, в которой COLLECT( DISTINCT ... )
не работает, вы можете использовать SET( CAST( COLLECT( risk ) AS risks ) )
для получения различных значений.