snowflake-cloud-data-platform - 无法识别 Snowflake 存储过程参数

标签 snowflake-cloud-data-platform

我正在构建雪花存储过程,但在使用雪花过程中传递的参数时遇到困难。

create or replace procedure dumper(n float)
 returns float
 language javascript
 execute as caller
 as 
 $$
    
    var text = "select file_name from table(information_schema.COPY_HISTORY(TABLE_NAME=> 'records', start_time=> dateadd(hours, ?, current_timestamp())));";
    var statement = snowflake.createStatement({sqlText: text, binds: [n]});
    var result = statement.execute();
    return statement.getRowCount();
 $$
 ;

正在尝试调用上述过程

call dumper(-2);

导致如下错误

JavaScript execution error: Uncaught ReferenceError: n is not defined in DUMPER at ' var statement = snowflake.createStatement({sqlText: text, binds: [n]});' position 70 stackstrace: DUMPER line: 4

我尝试使用在 here 上讨论的插值法但这也没有成功。

有关如何处理传递的参数的任何线索。

最佳答案

您必须在 JavaScript 代码中将“N”大写:

var statement = snowflake.createStatement({sqlText: text, binds: [N]});

传递给 Snowflake 存储过程的变量在进入 JavaScript 之前与其他对象名称一样。如果它们没有被双引号括起来,则 Snowflake 会隐式地将它们大写。请记住将传递给 Snowflake 中的 SP 和 UDF 的所有参数都大写。使用 JavaScript 在 SP 或 UDF 中定义的变量遵循该语言的一般规则。

由于常规规则适用于 Snowflake 标识符,就像它们适用于传递给过程和函数的变量一样,如果您想使用小写或混合大小写的变量名称,则可以将参数用双引号引起来:

create or replace function echo_string("n" string)
returns string
language javascript
as
$$
    return n; // This works because "n" is double quoted in the signature
$$;

select echo_string('Hello world.');

关于snowflake-cloud-data-platform - 无法识别 Snowflake 存储过程参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65394900/

相关文章:

azure - Microsoft Azure - 事件网格架构 BlobCreated 事件在提交 blob 之前触发

python - 替代WITH RECURSIVE 子句

sql - 从雪花中的键值数组构建具有动态列的表

python - 安装的 'pyarrow'版本不兼容,如何修复?

snowflake-cloud-data-platform - 您可以使用 AWS Glue 获得永久 IP 地址,以便它可以在 Snowflake 中列入白名单吗?

sql - 缺口和孤岛,全师版

snowflake-cloud-data-platform - Snowflake 中的四分之一函数

snowflake-cloud-data-platform - 在 Snowflake 上向其他人提出异常

sql - 从雪花中批量读取行

snowflake-cloud-data-platform - 雪花复制到无法识别时间戳