У меня есть таблица, содержащая ряд чисел 1,2,3,4,5,11,12,13,14,15,101,102,103,104,105,510,511,512,513,515,516,517. Мне нужна функция PL/SQL, чтобы я мог получить диапазоны, а затем сохранить все все диапазоны в одной строковой переменной в следующем формате. «1-5, 11-15, 101-105, 510-517».
У меня есть код для генерации гнева в SQL*Plus, но он не работает в PL/SQL и формах. Процедура приведена ниже:
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 v_list VARCHAR2(100);
3 BEGIN
4 SELECT listagg(RANGE, ',') WITHIN GROUP(
5 ORDER BY min_num)
6 INTO v_list
7 FROM
8 (SELECT MIN(num) min_num,
9 MIN(num)
10 ||'-'
11 || MAX(num) range
12 FROM
13 (SELECT num, num-Row_Number() over(order by num) AS rn FROM t
14 )
15 GROUP BY rn
16 );
17 dbms_output.put_line(v_list);
18 END;
19 /
1-3,5-7,10-12,20-20