尝试将重新分配声明变量的SQL代码转换为Snowflake

问题描述 投票:0回答:1

我正在尝试使用雪花 UI 将以下 SQL 代码转换为雪花。转换后的雪花代码将在存储过程中使用。

DECLARE @NumofDays int
SET @NumofDays = 15

Declare @loaddt smalldatetime

If @NumofDays = 1
BEGIN set @loaddt = getdate() end
Else
Begin set @loaddt = ‘1900-01-01’ end

Insert into ##temptable
Select @loaddt as Loaddt

这是我在 Snowflake 中尝试过的方法,它不会将 :loaddt 插入临时表中,从而给我错误“INVALID IDENTIFIER ‘LOADDT’”:

BEGIN
LET NUMofDays int := 1;

BEGIN
CASE WHEN (:NUMofDays = 1) then let loaddt datetime := current_date();
ELSE LET loaddt datetime := '1900-01-01'
END;
END;

INSERT INTO (schemaname).TEMPTABLE
SELECT :loaddt as Loaddt;
End;

(已编辑)当我在 NumofDays 之后声明加载日期(如以下代码所示)时,我以为我已经弄清楚了,但意识到虽然它确实允许我的代码运行,但如果我将 numofdays 更改为不同的数字,它就不会插入正确的日期.

CREATE OR REPLACE LOCAL TEMPORARY TABLE (schemaname).TEMP AS
SELECT to_timestamp_ntz(current_date) as loaddate;

BEGIN
LET NUMofDays int := 1;
LET Loaddt datetime := to_date('2023-02-10');

BEGIN
CASE WHEN (NUMofDays = 1) then 
let loaddt datetime := current_date();
ELSE 
LET loaddt datetime := to_date('1900-01-01 ');
END;
END;

INSERT INTO (schemaname).TEMP
SELECT :loaddt as Loaddate;
End;

我真的很感激任何关于如何进行这种转换的建议,因为我已经绞尽脑汁几天了,但无法让代码正常运行。我也是雪花新手,所以我确信我错过了一些我在文档中找不到的重要内容。

snowflake-cloud-data-platform data-conversion code-conversion
1个回答
0
投票

我认为主要问题是您在 CASE 块内声明变量

again
而不是仅仅为其赋值。删除那些额外的
LET
关键字。

CASE WHEN (NUMofDays = 1) THEN
    loaddt := current_date();
ELSE
    loaddt := to_date('1900-01-01');
END;

有关更多信息,请查看了解 Snowflake 脚本中的块使用变量

© www.soinside.com 2019 - 2024. All rights reserved.