Snowflake从其他表插入数据到staging表的存储过程调用出现行解析错误
错误原因定位
- CASE语句语法缺失:第二个
WHEN分支仅编写了判断条件,未补充THEN关键字及对应返回值,违反SQL语法规则,是触发解析错误的核心原因。 - 转义字符格式错误:代码中使用的
\"是HTML实体编码,无法在Snowflake JavaScript存储过程的上下文中被正确识别,会导致生成的SQL文本存在语法异常。 - 存在不必要的语法冗余:
INSERT INTO后嵌套SELECT的外层括号属于冗余写法,会增加SQL解析器的识别负担,存在触发歧义的可能。
修复后的完整代码
Create or replace procedure insert_into_staged1() RETURNS STRING NOT NULL LANGUAGE JAVASCRIPT AS $$ var sql_cmd = `Insert into staging_table select xyz as xyz, abc as old_abc, case when rx_code in ('1234','5432') and trim(split_part(upper(abc),'*',1)) in ('GOOGLE','APPLE','SAMSUNG') then trim(split_part(upper(abc),'*',1)) when rx_code in ('6012') and trim(split_part(upper(abc),'*',1)) != '' then trim(split_part(upper(abc),'*',1)) else coalesce(replace(abc,'"', ''''), '') end as abc_new from table2` var sql = snowflake.createStatement({sqlText: sql_cmd}); var result = sql.execute(); return 'success'; $$;
改动说明
- 补全了第二个
WHEN分支的判断逻辑和THEN返回值,对齐原有业务逻辑的同时符合SQL语法要求 - 替换了错误的HTML转义编码,修正了字符串替换逻辑的转义写法,保证SQL文本可以被正确解析
- 移除了
SELECT外层的冗余括号,调整了SQL语句缩进,降低解析歧义同时提升可读性
内容的提问来源于stack exchange,提问作者Sharmila Chowdary
相关产品推荐
相关产品推荐

