【问题标题】:Snowflake stored procedure bind arguments issue雪花存储过程绑定参数问题
【发布时间】:2021-03-25 16:34:10
【问题描述】:

下面是我的示例代码:

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 注入问题

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

【问题讨论】:

    标签: snowflake-cloud-data-platform


    【解决方案1】:

    在其他 UDF 中,JavaScript 函数的参数需要在 JavaScript 主体中为 ALL_CAPS,因为 SQL 部分(函数声明)SQL 是不区分大小写的,而 java 它是大写的“实际情况”。或者你可以在声明中双引号 then ,作为小写,然后在正文中使用小写。

    【讨论】:

    • 我在存储过程中使用大写相同的错误。 var stmt = snowflake.createStatement( {sqlText: retrieve_queries_sql, binds:[DYNAMIC_COLUMNS, DYNAMIC_WHERE_CLAUSE, DYNAMIC_COLUMNS]} );
    猜你喜欢
    • 1970-01-01
    • 2021-02-13
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 2022-10-15
    • 2021-10-01
    相关资源
    最近更新 更多