雪花存储过程变量绑定错误
Posted
技术标签:
【中文标题】雪花存储过程变量绑定错误【英文标题】:Snowflake stored procedure variable binding error 【发布时间】:2020-02-23 19:02:01 【问题描述】:我正在尝试创建和执行一个简单的 Snowflake 存储过程,它接受一个输入参数并创建一个阶段。但是,当我尝试调用它抛出的过程时 错误:参数的无效值 [:]
create or replace procedure raw.test.create_stage_test(PARM_URL string)
returns string
language javascript
execute as owner
as
$$
var cmd = `create or replace stage raw.test.agency_type_test
url =:1
file_format = (type = json)
credentials = (aws_role = 'arn:aws:iam::myrole');`
var sql_statement = snowflake.createStatement(
sqlText: cmd,
binds: [PARM_URL]
);
try
var rs = sql_statement.execute();
rs.next()
rcount = rs.getColumnValue(1);
if (rcount == 0)
throw "row count is 0";
return "Rows count: " + rcount;
catch (err)
return "Failed: " + err; // Return a success/error indicator.
$$;
CALL raw.test.create_stage_test('s3://mybucket');
【问题讨论】:
好像是个bug 【参考方案1】:也许使用插值,如以下代码 sn-p 所示,可能是另一种选择?注意 url 值周围的单引号:
var cmd = `create or replace stage agency_type_test
url='$PARM_URL'
file_format = (type = json)
credentials = (aws_role = 'arn:aws:iam::myrole');`
var sql_statement = snowflake.createStatement(
sqlText: cmd
);
【讨论】:
请小心,因为字符串插值打开了 SQL 注入攻击的大门。如果这是一个问题,那么一定要清理 args。 这已经奏效了!正是我想要的。请阐明对 args 进行消毒的一些信息?任何例子都会有所帮助。 当然,例如,您可以使用正则表达式来确保 PARM_URL 的格式类似于有效的 S3 URL,并且不包含空格、引号、分号或双点。以上是关于雪花存储过程变量绑定错误的主要内容,如果未能解决你的问题,请参考以下文章
雪花上的 SQL 存储过程将绑定列视为字符串,并且它没有从表中获取其值