Цикл в Oracle - PullRequest
       13

Цикл в Oracle

0 голосов
/ 23 октября 2019

Мне нужно зацикливаться в Oracle ежемесячно в течение 3 лет. Сначала я пытаюсь ежедневно, и ниже мой запрос, но я не уверен в ошибке.

Можете ли вы помочь с этим. Я довольно новичок в оракуле.

DECLARE @StartDT DATE;

SET @StartDT =  '20090101'

WHILE @StartDT <= '20090131'
BEGIN
    PRINT CONVERT(VARCHAR,@StartDT) + '---' + convert(varchar,DATEADD(DAY,1,@StartDT))
END

Ответы [ 2 ]

2 голосов
/ 23 октября 2019

То, что вы опубликовали, полностью синтаксис SQL Server. В Oracle вы, вероятно, сделали бы это в SQL

select date '2009-01-01' + level
  from dual
connect by level <= 31

Если вы хотите использовать PL / SQL (и при условии, что вы используете инструмент, который будет отображать вывод из dbms_output, который вы не должныПредположим, что произойдет в Prod), вы могли бы сделать что-то вроде этого.

declare
  l_dt date := date '2009-01-01';
begin
  while( l_dt <= date '2009-01-31' )
  loop
    dbms_output.put_line( to_char( l_dt, 'yyyy-mm-dd' ) );
    l_dt := l_dt + 1;
  end loop;
end;
0 голосов
/ 23 октября 2019

В Oracle вы можете использовать for loop следующим образом:

Begin
For d in (select date '2009-01-01' + level - 1 as dt
from dual
Connect by level <= add_months(date '2009-01-01', 3) - date '2009-01-01')
Loop
dbms_output.put_line(to_char(d.dt, 'yyyy-mm-dd'));
End loop;
End;
/

Cheers !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...