You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake自定义函数编译报错:parse_json实现IN过滤遇问题

SQL自定义函数编译错误分析与修复

错误原因拆解

  1. 异常声明语法不符合规范
    Snowflake存储过程/函数中自定义异常的语法并非直接在EXCEPTION后加错误码和描述,原代码里exception1 EXCEPTION (-20001, 'Error');的写法完全错误,这是触发编译报错的核心原因之一。

  2. 查询语句语法混乱

  • 函数内部引用输入参数应直接用参数名json_name,而非绑定变量格式:json_name;
  • parse_json的调用语法错误,无需as src的冗余写法;
  • lateral flatten的语句结构错误,多了闭合括号,且未正确关联解析后的JSON数据;
  • 表函数需要用RETURN QUERY指定返回的结果集,原代码缺少这个关键语句。

修正后的函数代码

CREATE OR REPLACE FUNCTION db.schema.function1(json_name VARCHAR) 
RETURNS TABLE(json_col VARCHAR) 
AS $$ 
BEGIN
    -- 解析JSON并扁平化非空值,返回结果集
    RETURN QUERY
    SELECT value::VARCHAR AS json_col
    FROM TABLE(flatten(input => parse_json(json_name)))
    WHERE value IS NOT NULL;
END; $$
LANGUAGE plpgsql;

可选:添加自定义异常处理

如果需要对无效输入做异常抛出,可以按照Snowflake规范补充逻辑:

CREATE OR REPLACE FUNCTION db.schema.function1(json_name VARCHAR) 
RETURNS TABLE(json_col VARCHAR) 
AS $$ 
DECLARE
    exception1 EXCEPTION;
BEGIN
    IF json_name IS NULL OR json_name = '' THEN
        RAISE exception1 USING MESSAGE = 'Invalid JSON input', ERRCODE = '-20001';
    END IF;
    
    RETURN QUERY
    SELECT value::VARCHAR AS json_col
    FROM TABLE(flatten(input => parse_json(json_name)))
    WHERE value IS NOT NULL;
EXCEPTION
    WHEN exception1 THEN
        RAISE;
END; $$
LANGUAGE plpgsql;

内容的提问来源于stack exchange,提问作者Robertino Bonora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 02:04:56