雪花中的 while 循环

发布于 2025-01-16 04:52:54 字数 880 浏览 2 评论 0原文

我正在 Snowflake 工作表上编写下面的 SQL 脚本,并在下面收到此错误。表格已定义。如有任何反馈,我们将不胜感激。

错误:

第 9 行位置 4 处未捕获类型“STATMENT_ERROR”异常:SQL 编译错误:位置 34 处错误第 162 行无效标识符“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;
$$

I am working on a SQL script below on Snowflake worksheets and getting this error below. Tables are defined. Any feedbacks is appreciated.

Error:

Uncaught exception of type 'STATEMENT_ERROR' on line 9 at position 4 : SQL compilation error: error line 162 at position 34 invalid identifier '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;
$

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

烟雨凡馨 2025-01-23 04:52:54

试试这个,将列名从 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;
$
;

try this, modified the column name from date to 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;
$
;
-黛色若梦 2025-01-23 04:52:54

您在语句末尾缺少分号。

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

You are missing semi colon at end of statement.

 currmonth :=dateadd(month,1,currmonth);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文