创建返回表的Snowflake JavaScript函数时出现语法错误求助
问题分析与解决方法
错误原因
你犯了两个关键问题:
- 函数声明为
LANGUAGE JAVASCRIPT,但函数体直接写了SQL语句——JavaScript引擎无法识别SQL语法,这是触发Unexpected identifier错误的核心原因。 - 参数名
mTRCS_NM与表字段名MTRCS_NM同名,直接引用会导致变量歧义。
修正后的代码
create or replace function MTRCS_NUM_TBL_FUNC(mTRCS_NM VARCHAR(1000)) returns table (SESN_UUID VARCHAR(100), MTRCS_NM VARCHAR(1000)) LANGUAGE JAVASCRIPT as $$ // 用占位符定义SQL,避免命名冲突 var sqlQuery = `SELECT DISTINCT SESN_UUID, MTRCS_NM FROM MTRCS WHERE MTRCS_NM = ?`; // 执行SQL并绑定参数 var stmt = snowflake.execute({ sqlText: sqlQuery, binds: [MTRCS_NUM_TBL_FUNC.mTRCS_NM] }); // 组装返回结果 var output = []; while (stmt.next()) { output.push({ SESN_UUID: stmt.getColumnValue(1), MTRCS_NM: stmt.getColumnValue(2) }); } return output; $$;
关键改动说明
- 使用Snowflake JavaScript UDF标准的
snowflake.execute()方法执行SQL,让JavaScript引擎能正确处理数据库查询。 - 通过
?占位符+binds数组传递参数,既解决了参数与字段的命名冲突,也避免了SQL注入风险。 - 循环读取查询结果集,组装成与函数返回表结构匹配的对象数组返回。
内容的提问来源于stack exchange,提问作者ADom
相关产品推荐
相关产品推荐

