plsql varchar2中的递增函数
increment function in plsql varchar2
我想在 varchar2 中使用它。例如:
declare
num number := &Number;
serie varchar2(200) := 'S = ';
begin
for x in 1 .. num loop
serie += x, ' + ';
end loop; `
end;
/
最后我希望这个系列像 "S = 1 + 2 + 3 ..." 我怎样才能做到这一点?
那就是这样的:
SQL> set serveroutput on
SQL> declare
2 num number := &Number;
3 serie varchar2(200) := 'S = ';
4 begin
5 for x in 1 .. num loop
6 serie := serie || to_char(x) || ' + ';
7 end loop;
8
9 -- remove the trailing "+"
10 serie := rtrim(serie, ' +');
11 dbms_output.put_Line(serie);
12 end;
13 /
Enter value for number: 5
S = 1 + 2 + 3 + 4 + 5
PL/SQL procedure successfully completed.
SQL>
几点评论:
- 第 6 行:您必须连接(连接运算符是双管道符号,
||
)SERIE 的前一个值;否则,您将只有最后一个数字
- 第 10 行:删除尾随的“+”符号
在纯 SQL 中可以完成的事情,通常应该在纯 SQL 中完成:
declare
num number := &Number;
serie varchar2(200);
begin
select 'S = ' || listagg(rownum, ', ') within group (order by rownum)
into serie
from dual
connect by level <= num;
dbms_output.put_line(serie);
end;
/
num = 10
的结果:
S = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
注意,listagg
函数是在 Oracle 11.2 版本中引入的。
我想在 varchar2 中使用它。例如:
declare
num number := &Number;
serie varchar2(200) := 'S = ';
begin
for x in 1 .. num loop
serie += x, ' + ';
end loop; `
end;
/
最后我希望这个系列像 "S = 1 + 2 + 3 ..." 我怎样才能做到这一点?
那就是这样的:
SQL> set serveroutput on
SQL> declare
2 num number := &Number;
3 serie varchar2(200) := 'S = ';
4 begin
5 for x in 1 .. num loop
6 serie := serie || to_char(x) || ' + ';
7 end loop;
8
9 -- remove the trailing "+"
10 serie := rtrim(serie, ' +');
11 dbms_output.put_Line(serie);
12 end;
13 /
Enter value for number: 5
S = 1 + 2 + 3 + 4 + 5
PL/SQL procedure successfully completed.
SQL>
几点评论:
- 第 6 行:您必须连接(连接运算符是双管道符号,
||
)SERIE 的前一个值;否则,您将只有最后一个数字 - 第 10 行:删除尾随的“+”符号
在纯 SQL 中可以完成的事情,通常应该在纯 SQL 中完成:
declare
num number := &Number;
serie varchar2(200);
begin
select 'S = ' || listagg(rownum, ', ') within group (order by rownum)
into serie
from dual
connect by level <= num;
dbms_output.put_line(serie);
end;
/
num = 10
的结果:
S = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
注意,listagg
函数是在 Oracle 11.2 版本中引入的。