Функция приращения в 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 ...". Как я могу заставить это работать?

1
0
185
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это будет примерно так:

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: удалите знак "+" в конце

Хорошая идея с rtrim, довольно элегантная. Я займусь своими проектами.

Dmitriy 17.09.2018 00:05

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

Спасибо, чувак, но я хочу только в чистом формате pl / sql. Но большое спасибо за ответ

Giulio 14.09.2018 21:41

@Giulio, у меня, конечно, тоже есть решение на PL / SQL. Я имею в виду, что расчет выполняется одним SQL-запросом, а не циклом PL / SQL for. Обычно запросы SQL работают быстрее.

Dmitriy 15.09.2018 17:29

Да, но я не могу работать с SQL в этом примере, просто pl / sql. Но спасибо

Giulio 16.09.2018 23:13

Другие вопросы по теме