如何用纯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
相关产品推荐
相关产品推荐

