Snowflake查询输出变量值表格报错,求报错原因
报错原因及修复方案
报错核心原因
$Results未定义:代码中IDENTIFIER($Results)引用了会话变量$Results,但你既没提前用SET $Results = '目标表名'定义该变量,也不存在同名的实际表,Snowflake无法找到这个变量,因此抛出“会话变量不存在”的错误。- 逻辑冗余且存在语法错误:你的需求是返回变量值,完全不需要通过
INSERT往表中写入数据,这步操作纯属多余;另外RETURN TABLE(Results)里的Results并非合法的表对象,你从未声明过这个表变量,这也是明显的语法错误。
修复后的代码(直接返回变量值,可轻松转为存储过程)
DECLARE ThirteenMonth DATE; RollingStartDate DATE; ReportDate DATE; BEGIN -- 计算变量值 ReportDate := IFNULL(:ReportDate, CAST(DATEADD(d,-1,GETDATE()) AS DATE)); ThirteenMonth := DATEADD(MONTH, -13, ReportDate); -- 直接用已声明的变量,无需加: RollingStartDate := DATEADD(MONTH, -25, ReportDate); -- 同上 -- 直接返回变量值,无需插入表 SELECT ReportDate, ThirteenMonth, RollingStartDate; END;
转为存储过程的示例(无缝迁移)
如果要改成存储过程,只需套上存储过程的定义壳子即可:
CREATE OR REPLACE PROCEDURE get_date_variables(ReportDate DATE) RETURNS TABLE(ReportDate DATE, ThirteenMonth DATE, RollingStartDate DATE) LANGUAGE SQL AS $$ DECLARE ThirteenMonth DATE; RollingStartDate DATE; local_ReportDate DATE; BEGIN local_ReportDate := IFNULL(ReportDate, CAST(DATEADD(d,-1,GETDATE()) AS DATE)); ThirteenMonth := DATEADD(MONTH, -13, local_ReportDate); RollingStartDate := DATEADD(MONTH, -25, local_ReportDate); RETURN SELECT local_ReportDate, ThirteenMonth, RollingStartDate; END; $$; -- 调用存储过程 CALL get_date_variables('2024-01-01');
内容的提问来源于stack exchange,提问作者steveb
相关产品推荐
相关产品推荐

