以下是我的示例代码:
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 注入问题
如何以最佳方式绑定参数?任何建议表示赞赏。
答案 0 :(得分:0)
在其他 UDF 中,JavaScript 函数的参数在 JavaScript 主体中需要为 ALL_CAPS,因为 SQL 部分(函数声明)SQL 不区分大小写,而 java 它是“它到底是怎么回事”,它是大写的。或者,您可以在声明中用双引号将 then 设为小写,以便在正文中使用 then 小写。