Snowflake存储过程执行报错:rs.getcolumnValue不是函数
问题排查与解决方法
1 直接报错原因
报错TypeError: rs.getcolumnValue is not a function是因为方法名大小写拼写错误。Snowflake JavaScript存储过程中,ResultSet对象获取字段值的方法遵循驼峰命名规范,正确写法是getColumnValue(),你代码中写的getcolumnValue首字母c为小写,属于方法名拼写错误,因此找不到对应方法抛出类型错误。
2 修复后的完整代码
同时你代码中还存在一个隐藏问题:给sqlquery赋值的fltConvUomPK是未定义的变量,修复第一个问题后运行仍会抛出未定义变量的错误。下面是修复后的完整示例,假设你的需求是返回查询到的salary值:
create or replace procedure test_0916() returns string not null language javascript execute as owner as $$ try { var sqlquery=" "; var outcome=" "; var x=" "; sql_command =`select salary from EMPLOYEES where employee_id=8`; var rs=snowflake.execute({sqlText:sql_command}); // 先判断是否有返回结果,避免无数据时取值报错 if (rs.next()) { // 修正为驼峰写法 getColumnValue x=rs.getColumnValue(1); // 若确实需要使用fltConvUomPK,请先声明定义该变量 sqlquery=x.toString(); } else { return "未查询到employee_id=8的员工数据"; } } catch (err) { return "Error: " + err; } return sqlquery; $$;
修复后重新创建存储过程,再执行call test_0916();即可正常运行。
3 额外优化建议
- 查询数据前先判断
rs.next()的返回结果,避免查询无匹配数据时后续取值抛出异常 - 所有使用的变量必须提前声明定义,避免出现未定义变量的引用错误
- 该存储过程返回值为string类型,查询到的salary为数值类型,建议手动调用
toString()做类型转换,避免隐式转换引发异常
内容的提问来源于stack exchange,提问作者user16595206
相关产品推荐
相关产品推荐

