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