инкрементная функция в plsql varchar2 - PullRequest
0 голосов
/ 13 сентября 2018

Я хочу использовать это в 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 ..." Как я могу заставить эту работу работать?

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Что может быть сделано в чистом 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.

0 голосов
/ 13 сентября 2018

Это будет что-то вроде этого:

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: удалите завершающий знак "+"
...