我需要重写一个在 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 语句的示例?
谢谢, 乔
答案 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"
为简单起见,我省略了任何验证。
干杯