Snowflake存储过程执行报Uncaught ReferenceError错误如何解决?
报错原因
- Snowflake JavaScript存储过程有强制规则:所有从SQL层传入的存储过程输入参数,在JavaScript代码块的上下文中会被自动转换为全大写的变量名。你在JS代码里调用的是小写的
float_param1,和实际存在的全大写变量名不匹配,因此抛出未定义的引用错误。
修复方案
直接将JS代码中引用的参数名改为全大写的FLOAT_PARAM1即可,也可以同时优化SQL写法改用绑定变量避免注入风险,修复后的完整代码如下:
create or replace table test1(num_col1 number); create or replace procedure rt(float_param1 float ) returns string language javascript as $$ -- 方案1:直接用全大写参数名拼接(和你原有写法兼容) var sql_command = "insert into test1 (num_col1) values (" + FLOAT_PARAM1 + ")"; -- 更安全的方案2:使用绑定变量,避免SQL注入风险,推荐使用 -- var sql_command = "insert into test1 (num_col1) values (?)"; -- snowflake.execute({sqltext: sql_command, binds: [FLOAT_PARAM1]}); snowflake.execute( {sqltext:sql_command} ); return 'success.'; $$ ; call rt(12.23::float);
内容的提问来源于stack exchange,提问作者sai
相关产品推荐
相关产品推荐

