Snowflake 脚本在 if 语句中设置变量
Snowflake scripting set variable in if statment
在 Snowflake 中,我尝试根据过程的输入将变量设置为不同的值。
当我在这里读到 if 语句时:
https://docs.snowflake.com/en/developer-guide/snowflake-scripting/branch.html
如果 type_name 有特定值,我不知道如何使用输入 type_name 设置新变量或覆盖查询变量,有什么想法吗?
create or replace procedure test_sp_dynamic(table_name varchar,type_name varchar)
returns table(X varchar)
language sql
as
$$
declare
tn varchar default :type_name;
tn_2 varchar;
res RESULTSET;
query varchar default 'SELECT Y ' || :table_name || ' ORDER BY Y';
begin
res := (execute immediate :query);
return table (res);
end;
$$
;
问题含糊不清。可以覆盖 DECLARE
块中定义的查询。
测试table:
CREATE OR REPLACE TABLE t(Y VARCHAR, Z VARCHAR)
AS SELECT 1, 2 UNION ALL SELECT 10,20;
程序:
create or replace procedure test_sp_dynamic(table_name varchar,type_name varchar)
returns table(X varchar)
language sql
as
$$
declare
res RESULTSET;
query VARCHAR;
begin
if (:type_name = 'some_value') then
query := 'SELECT Z FROM ' || :table_name || ' ORDER BY Z';
else
query := 'SELECT Y FROM ' || :table_name || ' ORDER BY Y';
end if;
res := (execute immediate :query);
return table(res);
end;
$$
;
CALL test_sp_dynamic('t', 'some_value');
-- X
-- 2
-- 20
CALL test_sp_dynamic('t', 'else');
-- X
-- 1
-- 10
在 Snowflake 中,我尝试根据过程的输入将变量设置为不同的值。
当我在这里读到 if 语句时: https://docs.snowflake.com/en/developer-guide/snowflake-scripting/branch.html
如果 type_name 有特定值,我不知道如何使用输入 type_name 设置新变量或覆盖查询变量,有什么想法吗?
create or replace procedure test_sp_dynamic(table_name varchar,type_name varchar)
returns table(X varchar)
language sql
as
$$
declare
tn varchar default :type_name;
tn_2 varchar;
res RESULTSET;
query varchar default 'SELECT Y ' || :table_name || ' ORDER BY Y';
begin
res := (execute immediate :query);
return table (res);
end;
$$
;
问题含糊不清。可以覆盖 DECLARE
块中定义的查询。
测试table:
CREATE OR REPLACE TABLE t(Y VARCHAR, Z VARCHAR)
AS SELECT 1, 2 UNION ALL SELECT 10,20;
程序:
create or replace procedure test_sp_dynamic(table_name varchar,type_name varchar)
returns table(X varchar)
language sql
as
$$
declare
res RESULTSET;
query VARCHAR;
begin
if (:type_name = 'some_value') then
query := 'SELECT Z FROM ' || :table_name || ' ORDER BY Z';
else
query := 'SELECT Y FROM ' || :table_name || ' ORDER BY Y';
end if;
res := (execute immediate :query);
return table(res);
end;
$$
;
CALL test_sp_dynamic('t', 'some_value');
-- X
-- 2
-- 20
CALL test_sp_dynamic('t', 'else');
-- X
-- 1
-- 10