Ну, из вашего примерного запроса не совсем ясно, почему вы хотите первый LISTAGG
.
Похоже, в основном это то, что вы пытаетесь сделать:
SELECT LISTAGG (data2, ',') WITHIN GROUP (ORDER BY data2)
INTO v_data2
FROM table1
WHERE data1 IN ( select data1 from table1 where .. );--some other where clause
В принципе, вы должны расколоть V_DATA
значение, разделенное запятыми, на строки.
Вот пример, основанный на схеме Скотта:
SQL> DECLARE
2 v_data VARCHAR2 (100);
3 v_data2 VARCHAR2 (100);
4 BEGIN
5 SELECT LISTAGG (deptno, ',') WITHIN GROUP (ORDER BY deptno)
6 INTO v_data
7 FROM dept
8 WHERE deptno IN (10, 20, 30);
9
10 DBMS_OUTPUT.put_line (v_data);
11
12 SELECT LISTAGG (ename, ',') WITHIN GROUP (ORDER BY deptno)
13 INTO v_data2
14 FROM emp
15 WHERE deptno IN (select regexp_substr(v_data, '[^,]+', 1, level)
16 from dual
17 connect by level <= regexp_count(v_data, ',') + 1
18 );
19
20 DBMS_OUTPUT.put_line (v_data2);
21 END;
22 /
10,20,30
CLARK,KING,MILLER,ADAMS,FORD,JONES,SCOTT,SMITH,ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD
PL/SQL procedure successfully completed.
SQL>