【问题标题】:While loop in Snowflake SQL雪花 SQL 中的 While 循环
【发布时间】:2022-10-24 21:13:06
【问题描述】:

我试图在雪花中运行 while 循环,但我不断收到错误 我需要遍历员工并将结果存储到临时表tblChildren

提前感谢您的帮助!

syntax error line 7 at position 17 unexpected '<'.

这是代码:

set ro  = (select count(*) from  tblEmployees);
    execute immediate $$ 
    
    begin
        set counter := 1;
        set iRows = ro;
        set EmployeeID = '';
       while(counter < iRows) do 
            select EmployeeID = TblEmployeeID from tblEmployees emp where emp.RowId = i
            insert into tblChildren 
            with cteChildren as
            (
            select  emp.tblEmployeeID as ChildId, emp.WorkEmail, emp.EmployeeManagerId
            from tblEmployees emp
            where   emp.EmployeeManagerId = EmployeeID        
            union all
            select  emp.tblEmployeeID as ChildId, emp.WorkEmail, emp.EmployeeManagerId
            from    tblEmployees emp
                    join cteChildren on emp.EmployeeManagerId = cteChildren.ChildId
             )  
            select EmployeeID as EmployeeManagerId, c.ChildId from cteChildren c 
            select i = i + 1 
            end while;
     end;
    $$;

【问题讨论】:

  • 这是一个脚本,还是存储过程中的一个片段?无论如何,看到一些不一致的变量分配(未引用的字符串,未声明的变量,使用“=”而不是“:=”的整数分配......请确认这是否是您的整个脚本(如果不是,请完整发布)。
  • 进一步看,我不清楚你想用这段代码完成什么——但这种方法可能不是正确的一种性能方式。请说明您要完成的工作,我们可能会帮助您更有效地实现它。
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如它目前所写的那样,很难准确地说出你在问什么。

标签: while-loop snowflake-cloud-data-platform


【解决方案1】:

您的脚本中有很多错误。我试图修复它们,这个可以工作,但不确定它是否按您的预期工作:

set ro  = (select count(*) from  tblEmployees);
    execute immediate $$ 
    declare
       counter number;
       iRows number;
       EmployeeID varchar;
    begin
       counter := 1;
       iRows := $ro;
       EmployeeID := '';
       while(counter < iRows) do 
            select TblEmployeeID into :EmployeeID from tblEmployees emp where emp.RowId = :counter;
            insert into tblChildren 
            with cteChildren as
            (
            select  emp.tblEmployeeID as ChildId, emp.WorkEmail, emp.EmployeeManagerId
            from tblEmployees emp
            where   emp.EmployeeManagerId = :EmployeeID 
            union all
            select  emp.tblEmployeeID as ChildId, emp.WorkEmail, emp.EmployeeManagerId
            from    tblEmployees emp
             join cteChildren on emp.EmployeeManagerId = cteChildren.ChildId
             )
             select :EmployeeID as EmployeeManagerId, c.ChildId  from cteChildren c; 
            counter := counter + 1; 
        end while;
     end;
    $$;

【讨论】:

    猜你喜欢
    • 2022-08-18
    • 2017-08-31
    • 2014-03-29
    • 2019-06-27
    • 2016-08-21
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 2021-11-24
    相关资源
    最近更新 更多