CREATE OR REPLACE PROCEDURE public.pkg_apollo_plant_demand_reopen(p_uid character varying, p_org_id integer, p_user_id character varying, p_role_code character varying, p_bo_code character varying, p_psi_period character varying, p_lang character varying, INOUT p_err_flag character varying DEFAULT '1'::character varying)
LANGUAGE plpgsql
AS $procedure$
DECLARE
v_has_one BOOLEAN:= FALSE;
v_has_two BOOLEAN:= FALSE;
v_all_zero BOOLEAN:= TRUE;
current_rows varchar[];
current_value varchar;
-- 声明变量
v_has_one BOOLEAN:= FALSE;
v_has_two BOOLEAN:= FALSE;
v_all_zero BOOLEAN:= TRUE;
current_rows varchar[];
current_value varchar;
select
ARRAY_AGG(trim(psi_result)) INTO current_rows
from v_psi_plant_status
where org_id = p_org_id
and psi_step = 'DEMAND'
and psi_period = p_psi_period;
FOREACH current_value IN ARRAY current_rows Loop
IF current_value = '1' THEN
v_has_one := TRUE;
v_all_zero := FALSE;
ELSIF current_value = '2' THEN
v_has_two := TRUE;
v_all_zero := FALSE;
elsif current_value <> '0' THEN
v_all_zero := FALSE;
END IF;
END LOOP;
raise notice 'current_rows (%)',current_rows;
raise notice 'v_all_zero (%)',v_all_zero;
raise notice 'v_has_one (%)',v_has_one;
raise notice 'v_has_two (%)',v_has_two;
-- 根据条件执行不同的操作
IF v_all_zero THEN
-- 未确认
update plant_m_psi_period_info
set order_conf_stat='0',
modify_by=p_user_id,
modify_dt=hand_sys_now()
where org_id=p_org_id
and psi_period=p_psi_period
and del_flag='0';
-- and order_conf_stat='1';
ELSIF v_has_one THEN
-- 部分确认
update plant_m_psi_period_info
set order_conf_stat='3',
modify_by=p_user_id,
modify_dt=hand_sys_now()
where org_id=p_org_id
and psi_period=p_psi_period
and del_flag='0';
ELSIF not v_has_one and v_has_two THEN
update plant_m_psi_period_info
set order_conf_stat='0',
modify_by=p_user_id,
modify_dt=hand_sys_now()
where org_id=p_org_id
and psi_period=p_psi_period
and del_flag='0';
-- and order_conf_stat='1';
-- 这里可以添加更多的条件判断和执行的操作
ELSE
-- 其他情况的处理逻辑
-- DBMS_OUTPUT.PUT_LINE('其他情况');
END IF;
存储过程 postgre 循环操作 获取值
于 2024-06-11 22:27:31 首次发布