雪花存储过程绑定参数问题

时间:2021-03-25 07:53:39

标签: snowflake-cloud-data-platform

以下是我的示例代码:

CREATE OR REPLACE PROCEDURE database.schema.sp_sample(dynamic_columns VARCHAR, dynamic_where_clause VARCHAR)
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
EXECUTE AS CALLER
AS 
$$
rs="Success";
try {
retrieve_queries_sql = `SELECT COL_1, COL_2, ? FROM table ? GROUP BY ?`;
var stmt = snowflake.createStatement( {sqlText: retrieve_queries_sql, binds:[DYNAMIC_COLUMNS, DYNAMIC_WHERE_CLAUSE, DYNAMIC_COLUMNS]} );
var rs = stmt.execute();
}
catch(err) {
rs= "Failed Message: "+err.message;
}
return rs;
$$;

当我尝试绑定这些列时,Snowflake 会引发错误意外?我什至尝试使用 :1, :2 即使没有工作同样的错误意外:

不想更喜欢插值 ${dynamic_columns} 或 ${dynamic_where_clause} 因为它会导致 sql 注入问题

如何以最佳方式绑定参数?任何建议表示赞赏。

1 个答案:

答案 0 :(得分:0)

在其他 UDF 中,JavaScript 函数的参数在 JavaScript 主体中需要为 ALL_CAPS,因为 SQL 部分(函数声明)SQL 不区分大小写,而 java 它是“它到底是怎么回事”,它是大写的。或者,您可以在声明中用双引号将 then 设为小写,以便在正文中使用 then 小写。