У меня есть таблица, содержащая ряд чисел 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".Получение диапазонов из серии чисел из таблицы и сохранение всех диапазонов в строковой переменной в формах PLSQL/Oracle
У меня есть код для генерации ярости в 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
Хорошо, наконец, решена. –
Если я хочу получить противоположный результат, т. Е. Отсутствует как 4-4, 8-9, 13-19 , то какие изменения потребуются в вышеуказанном запросе. –
@ HayatMuhammad См. Http://lalitkumarb.com/2015/07/22/find-range-of-missing-values-in-a-sequence-of-numbers-or-dates/ –