在雪花中循环

While loop in snowflake

我正在 Snowflake 工作表上编写下面的 SQL 脚本并在下面收到此错误。表已定义。感谢任何反馈。

错误:

第 9 行第 4 行未捕获类型 'STATEMENT_ERROR' 的异常:SQL 编译错误:第 162 行错误,第 34 行标识符无效 'CURRMONTH'

execute immediate $$ 
declare
    firstmonth :=(select dateadd(month,case when day(current_timestamp())<=10 then -1 else 0 end,dateadd(month,0,date_trunc('month',current_date()))));
    lastmonth  :=(select dateadd(month,1,dateadd(month,case when day(current_timestamp())<=10 then -1 else 0 end,dateadd(month,0,date_trunc('month',current_date())))));
    currmonth date default firstmonth;

begin        
 while (currmonth <=lastmonth) do 
    insert into temptable  
    select colA, colB, colC, colD
    from tableA 
    where date between currmonth and dateadd(day,-1,dateadd(month,1,currmonth))  and date2 = currmonth

 currmonth :=dateadd(month,1,currmonth)
end while;
end;
$$

语句末尾缺少分号。

 currmonth :=dateadd(month,1,currmonth);

试试这个,将列名从 date 修改为 date1,

create or replace  table temptable  (date1 date,date2 date, colA varchar2, colB varchar2, colC varchar2, colD varchar2);
create or replace  table tableA  (date1 date,date2 date, colA varchar2, colB varchar2, colC varchar2, colD varchar2);


execute immediate $$ 
declare
    firstmonth :=(select dateadd(month,case when day(current_timestamp())<=10 then -1 else 0 end,dateadd(month,0,date_trunc('month',current_date()))));
    lastmonth  :=(select dateadd(month,1,dateadd(month,case when day(current_timestamp())<=10 then -1 else 0 end,dateadd(month,0,date_trunc('month',current_date())))));
    --currmonth date default firstmonth;
    currmonth date ;
begin
 currmonth :=firstmonth;
 while (currmonth <=lastmonth) do 
    insert into temptable (colA, colB, colC, colD)
    select colA, colB, colC, colD
    from tableA 
    where date1 between :currmonth and dateadd(day,-1,dateadd(month,1,:currmonth))  and date2 = :currmonth;

 currmonth :=dateadd(month,1,currmonth);
end while;
end;
$$
;