【发布时间】:2015-07-31 07:09:59
【问题描述】:
我有一个表格,其中包含一系列数字 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
【问题讨论】:
标签: oracle plsql oracleforms oraclereports