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 版本中引入的。