在雪花中循环
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;
$$
;
我正在 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;
$$
;