我正在尝试使用雪花 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;
我真的很感激任何关于如何进行这种转换的建议,因为我已经绞尽脑汁几天了,但无法让代码正常运行。我也是雪花新手,所以我确信我错过了一些我在文档中找不到的重要内容。
我认为主要问题是您在 CASE
块内声明变量
again而不是仅仅为其赋值。删除那些额外的
LET
关键字。
CASE WHEN (NUMofDays = 1) THEN
loaddt := current_date();
ELSE
loaddt := to_date('1900-01-01');
END;
有关更多信息,请查看了解 Snowflake 脚本中的块和使用变量。