雪花函数 - 如何声明变量并在函数内部使用 sql 语句

时间:2021-01-06 20:38:35

标签: snowflake-cloud-data-platform snowflake-schema

我需要重写一个在 power bi 报告中调用的 SQL 标量函数

如何在雪花中实现以下功能?

创建函数测试(@input varchar(10)) 返回 varchar ( 声明@text varchar(50) 声明@cnt int select @cnt = max(key) from tbl;

如果@input = 'table1' 开始 select @text = text from table1 --statements 将根据传递的输入而不同,并且来自表格 结束

如果@input = 'table12' 开始 从 table12 中选择 @text = 文本,其中 id = @cnt 结束

...

返回@text )

能否请您分享一些我们可以声明 /set 变量并根据传入的输入参数执行 sql 语句的示例?

谢谢, 乔

1 个答案:

答案 0 :(得分:0)

我认为存储过程在您的情况下效果更好。我尝试了以下示例,希望它是您所追求的:

create or replace table test (a int);
insert into test values (1), (2);

create or replace table table1 (a varchar, id int);
insert into table1 values ('table1', 1);

create or replace table table2 (a varchar, id int);
insert into table2 values ('table2', 2);
  
CREATE OR REPLACE PROCEDURE my_proc(INPUT VARCHAR) 
RETURNS VARCHAR 
LANGUAGE JAVASCRIPT 
AS 
$$ 
    var stmt = snowflake.createStatement( {sqlText: "SELECT MAX(a) FROM test;"} ); 
    var resultSet = stmt.execute(); 
    resultSet.next(); 
    
    var id = resultSet.getColumnValue(1); 
    
    stmt = snowflake.createStatement( {sqlText: "SELECT a FROM " + INPUT + " WHERE id = " + id + ";"} ); 
    resultSet = stmt.execute(); 
    resultSet.next(); 
    
    return resultSet.getColumnValue(1);
$$ ; 

call my_proc('table2');
-- it returns "table2"

为简单起见,我省略了任何验证。

干杯