提问人:Holmes IV 提问时间:11/17/2023 最后编辑:Holmes IV 更新时间:11/17/2023 访问量:39
使用定义长度的变量创建 Snowflake 查询?
Create Snowflake Query with Variables of defined Length?
问:
我知道我可以在存储过程中执行此操作。但是,每当我只是创建一个基本查询时,Snowflake 让我使用的只是“设置 vParmeter1 = ”;命令 这限制了我 256 个字符,这是有限制的。我知道 varchar 最高可达 16mb,如 DECLARE vParameter VARCHAR(16777216);我已经在我的程序中使用了它。我无法弄清楚的是如何在脚本中使用它。我一直在尝试将哪些有效和哪些“应该”有效相结合,但出于某种原因,Snowflake 喜欢重写如何编写 SQL 书籍。在我的代码下面出错和 VARCHAR(),如果你注释掉 声明 它可以工作。第二组被注释掉了,我看到别人在用,所以我试过了,但它从来没有到达那里,所以我把它关掉了。错误是 EOF 第 1 行,就在 varchar 大小的最后 6 行。我还尝试将 varchar 大小减少到 30 左右,但只是更改了错误位置。
DECLARE vParameter1 VARCHAR(16777216);
SET vParameter1 = '700,145,138,159';
--SET vParameter1 := '700,145,138,159';
SELECT TO_NUMBER(table1.VALUE) AS Locations
FROM TABLE(SPLIT_to_table($vParameter1,',')) AS table1
以下是在我的机器上对我有用的最终答案,基于对赞成答案的帮助。
EXECUTE IMMEDIATE $$
DECLARE
vParameter1 VARCHAR(16777216) := '700,145,138,159';
res RESULTSET;
BEGIN
-- alternative to declare block
-- LET vParameter1 VARCHAR(16777216) := '700,145,138,159';
res := (
SELECT TO_NUMBER(table1.VALUE) AS Locations
FROM TABLE(SPLIT_to_table(:vParameter1,',')) AS table1
);
/* -- if no resultset is expected then simply:
INSERT INTO some_table(col)
SELECT TO_NUMBER(table1.VALUE) AS Locations
FROM TABLE(SPLIT_to_table(:vParameter1,',')) AS table1;
*/
RETURN TABLE(res);
END;
$$;
答:
1赞
Lukasz Szozda
11/17/2023
#1
会话变量 () != 块变量 ()。会话变量的硬限制为 256 字节。SET
DECLARE/LET
使用块变量:
DECLARE
vParameter1 VARCHAR(16777216) := '700,145,138,159';
res RESULTSET;
BEGIN
-- alternative to declare block
-- LET vParameter1 VARCHAR(16777216) := '700,145,138,159';
res := (
SELECT TO_NUMBER(table1.VALUE) AS Locations
FROM TABLE(SPLIT_to_table(:vParameter1,',')) AS table1
);
/* -- if no resultset is expected then simply:
INSERT INTO some_table(col)
SELECT TO_NUMBER(table1.VALUE) AS Locations
FROM TABLE(SPLIT_to_table(:vParameter1,',')) AS table1;
*/
RETURN TABLE(res);
END;
输出:
相关:
评论
0赞
Holmes IV
11/17/2023
嗯,在第 2 行仍然出现错误,在 Snowflake web 和 Dbeaver 中都尝试过。SQL 编译错误:位置 53 处的语法错误行 2 意外的“<EOF>”。
0赞
Lukasz Szozda
11/17/2023
docs.snowflake.com/en/developer-guide/snowflake-scripting/......- 请尝试 Snowsight UI 或EXECUTE IMMEDIATE $$ <block here> $$
;
0赞
Holmes IV
11/17/2023
这些雪花人疯了。非常感谢您的帮助。为什么有人会去他们的产品,我永远不会知道。非常感谢。
评论