提问人:Holmes IV 提问时间:11/17/2023 最后编辑:Holmes IV 更新时间:11/17/2023 访问量:50
你能将参数传递给匿名块吗?
Can you Pass a parameter to an anonymous block?
问:
我有一个匿名代码块,当我定义测试参数时,它起作用。但是,我真正需要做的是能够将一些东西传递到其中。
在注释掉的第 4 行代码中,您会看到一个 ?mark,这是我在使用会话变量时传递参数的方式。这当然将我限制在 256 位,我需要的远不止于此。
我不确定 Snowflake 怎么会是一家有如此限制的企业公司,所以我开始查看匿名块的 16 MB 限制并使用 VARCHAR。下面的脚本可以运行,但正如我所说,它是硬编码的。我不确定是否存在不同的变量,例如 $?或者 Snowflake 在这些内部使用一些奇怪的东西,类似于他们使用 = 来分配会话但 := 用于块。最终,它将在 SSRS 中被删除,因此用户可以单击“全部”而不会失败,因为列表中有 50 个项目,其中包含 6 个字符。(或其他类似的东西)
EXECUTE IMMEDIATE $$
DECLARE
vParameter1 VARCHAR(16777216) := '700,145,138,159';
--vParameter1 VARCHAR(16777216) := ?;
res RESULTSET DEFAULT (SELECT 0 AS LOC_ID, 'all' LOC_NAME);
BEGIN
res := (
SELECT 0 AS Loc_ID
UNION ALL
SELECT TO_NUMBER(table1.VALUE) AS Loc_ID
FROM TABLE(SPLIT_to_table(:vParameter1,',')) AS table1
);
RETURN TABLE(res);
END;
$$;
答: 暂无答案
评论
SELECT TO_NUMBER(table1.VALUE) AS Loc_ID FROM TABLE(SPLIT_to_table(<input_from_SSRS>,',')) AS table1