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

如何用纯SQL与IF/ELSE语句创建Snowflake存储过程(附示例表)

Snowflake SQL存储过程示例(基于GANESH_T表)

以下是结合IF/ELSE语句编写的两个Snowflake存储过程示例,均基于你提供的GANESH_T员工表实现。


示例1:根据部门和职位调整员工薪资

这个存储过程接收员工ID作为参数,根据员工所在部门和职位判断是否需要调整薪资,并返回操作结果。

CREATE OR REPLACE PROCEDURE ADJUST_EMPLOYEE_SALARY(p_employee_id INT)
RETURNS STRING
LANGUAGE SQL
AS
$$
DECLARE
    v_department STRING;
    v_position STRING;
    v_current_salary DECIMAL(10,2);
    v_result STRING;
BEGIN
    -- 获取目标员工的部门、职位及当前薪资
    SELECT IN_DEPARTMENT, IN_POSITION, IN_SALARY
    INTO v_department, v_position, v_current_salary
    FROM GANESH_T
    WHERE IN_EMPLOYEEID = p_employee_id;

    -- 校验员工是否存在
    IF v_department IS NULL THEN
        RETURN '错误:未找到ID为' || p_employee_id || '的员工';
    END IF;

    -- 分部门职位判断薪资调整规则
    IF v_department = 'IT' AND (v_position = 'Software Engineer' OR v_position = 'Database Administrator') THEN
        IF v_current_salary < 68000.00 THEN
            UPDATE GANESH_T
            SET IN_SALARY = IN_SALARY * 1.05
            WHERE IN_EMPLOYEEID = p_employee_id;
            v_result = '员工' || p_employee_id || '薪资已上调5%,调整后薪资:' || (v_current_salary * 1.05);
        ELSE
            v_result = '员工' || p_employee_id || '薪资已符合IT技术岗位标准,无需调整';
        END IF;
    ELSIF v_department = 'Sales' AND v_position = 'Sales Manager' THEN
        IF v_current_salary < 60000.00 THEN
            UPDATE GANESH_T
            SET IN_SALARY = IN_SALARY * 1.08
            WHERE IN_EMPLOYEEID = p_employee_id;
            v_result = '员工' || p_employee_id || '薪资已上调8%,调整后薪资:' || (v_current_salary * 1.08);
        ELSE
            v_result = '员工' || p_employee_id || '薪资已符合销售经理岗位标准,无需调整';
        END IF;
    ELSE
        v_result = '员工' || p_employee_id || '所在部门或职位不在薪资调整范围内';
    END IF;

    RETURN v_result;
END;
$$;

调用示例

-- 调整ID为3的软件工程师薪资
CALL ADJUST_EMPLOYEE_SALARY(3);

-- 检查ID为1的销售经理薪资是否需要调整
CALL ADJUST_EMPLOYEE_SALARY(1);

-- 查询不存在的员工ID
CALL ADJUST_EMPLOYEE_SALARY(99);

示例2:判断员工薪资等级

这个存储过程根据员工的薪资水平,将其划分为不同等级并返回结果。

CREATE OR REPLACE PROCEDURE CHECK_SALARY_LEVEL(p_employee_id INT)
RETURNS STRING
LANGUAGE SQL
AS
$$
DECLARE
    v_salary DECIMAL(10,2);
    v_level STRING;
BEGIN
    SELECT IN_SALARY INTO v_salary FROM GANESH_T WHERE IN_EMPLOYEEID = p_employee_id;

    -- 校验员工是否存在
    IF v_salary IS NULL THEN
        RETURN '员工ID不存在';
    END IF;

    -- 根据薪资区间判断等级
    IF v_salary >= 70000.00 THEN
        v_level = '高薪等级';
    ELSIF v_salary >= 60000.00 THEN
        v_level = '中等偏上薪资';
    ELSIF v_salary >= 50000.00 THEN
        v_level = '中等薪资';
    ELSE
        v_level = '基础薪资';
    END IF;

    RETURN '员工ID ' || p_employee_id || ' 的薪资等级为:' || v_level;
END;
$$;

调用示例

-- 查询ID为7的财务经理薪资等级
CALL CHECK_SALARY_LEVEL(7);

-- 查询ID为5的市场协调员薪资等级
CALL CHECK_SALARY_LEVEL(5);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:35:17