Snowflake JavaScript存储过程调用报SyntaxError错误问题咨询
报错触发原因
- JavaScript语法不支持SQL风格的
IS NULL空值判断写法,你在JS代码块中使用C_MKTSEGMENT IS NULL这类表达式,JS解析器无法识别,会判定为语法错误,触发括号缺失的报错提示。 - JavaScript关键字严格区分大小写,你使用了大写的
IF,不符合JS语法规范。 - 代码第一行
var sqlquery="";>末尾多了一个多余的尖括号>,属于语法拼写错误。 - 存储过程内写SQL语句时直接拼接JS变量的写法错误,会导致SQL执行时找不到对应字段。
- 循环逻辑中提前写了return语句,后续代码永远不会执行,属于逻辑错误。
修复后的完整代码
create or replace procedure test_09171(c_custkey varchar(25) , c_mktsegment varchar(25) , cname varchar(25)) returns string not null language javascript execute as owner as $$ var sqlquery=""; var VMAJOR=""; var VMINOR=""; try { // 修正为JS标准空值判断+小写if关键字 if (C_MKTSEGMENT == null || CNAME == null || C_MKTSEGMENT.trim() === '' || CNAME.trim() === '') { var sql_command = `SELECT C_MKTSEGMENT,cname from customers WHERE ccustkey = ?`; // 使用绑定变量传入参数,避免SQL注入和语法错误 var rs = snowflake.createStatement({sqlText: sql_command, binds: [C_CUSTKEY]}); var result_set1 = rs.execute(); while(result_set1.next()){ VMAJOR = result_set1.getColumnValue(1); VMINOR = result_set1.getColumnValue(2); // 调整return逻辑,返回查询到的结果而非传入的空值 return `查询成功,C_MKTSEGMENT: ${VMAJOR}, CNAME: ${VMINOR}`; } return "未查询到对应客户数据"; } return "succeeded"; } catch(error) { return error.message } $$;
调用测试
call test_09171('1369097','','Customer#001369097');
内容的提问来源于stack exchange,提问作者user16595206
相关产品推荐
相关产品推荐

