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

如何在Snowflake中基于INSERT INTO语句创建存储过程?

基于给定INSERT语句创建Snowflake存储过程

静态SQL存储过程实现

直接把你的INSERT逻辑封装到Snowflake的SQL存储过程中,以下是完整代码:

CREATE OR REPLACE PROCEDURE DB.PUBLIC.LOAD_SK_HISTORY()
RETURNS VARCHAR
LANGUAGE SQL
AS $$
BEGIN
    -- 执行插入逻辑
    INSERT INTO DB.PUBLIC.SK_HISTORY
    WITH OPEN_PO AS 
    (
        SELECT A.COL1, COL2, COL3, COL4, COL5, COL6, COL7, B.TIMING,
               SUM(COL8) AS OPEN_DOLLARS,
               COUNT(COL9) AS OPEN_LINES
        FROM TBL_A A
        LEFT JOIN TBL_B B ON A.COL1 = B.COL1
        GROUP BY 1,2,3,4,5,6,7,8
    )
    SELECT *
    FROM (
        SELECT COL1, COL2, COL3, COL4, COL5, COL6, COL7, OPEN_LINES
        FROM OPEN_PO
    ) T
    PIVOT (
        SUM(OPEN_DOLLARS)
        FOR TIMING IN ('T1', 'T2', 'T3', 'T4')
    ) P;

    RETURN '数据插入完成,存储过程执行成功';
EXCEPTION
    WHEN OTHERS THEN
        RETURN '存储过程执行失败:' || SQLERRM;
END;
$$;

关键说明

  • 存储过程命名为LOAD_SK_HISTORY,你可以根据需求修改名称
  • 使用LANGUAGE SQL编写,适合静态SQL场景,无需复杂逻辑处理
  • 加入了异常捕获块,执行出错时会返回错误信息,方便排查问题
  • 存储过程执行完成后会返回状态提示

调用存储过程

创建完成后,直接通过以下语句调用:

CALL DB.PUBLIC.LOAD_SK_HISTORY();

可选优化

如果后续需要动态调整PIVOT中的TIMING值,或者动态指定表名,可以改用JavaScript语言编写存储过程,通过动态SQL拼接实现,但当前场景下静态存储过程足够满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 11:57:13