CREATE OR REPLACE PROCEDURE cost_proportion(
p_assignment_id IN NUMBER,
p_proportion IN NUMBER,
p_old_value IN NUMBER,
p_cost_alloc_id IN NUMBER,
p_cost_code IN VARCHAR2,
p_date_from in date,
p_flag IN VARCHAR2 )
IS
PRAGMA AUTONOMOUS_TRANSACTION;
v_flag NUMBER :=0;
BEGIN
IF p_flag = 'V'
THEN
-- IF p_old_value > 0 THEN
DELETE
FROM cost_temp
WHERE 1=1
and cost_code = p_cost_code
--AND
AND assignment_id = p_assignment_id;
IF SQL%ROWCOUNT = 0 THEN
DELETE
FROM cost_temp
WHERE cost_allocation_id = p_cost_alloc_id
AND assignment_id = p_assignment_id;
END IF;
-- END IF;
INSERT
INTO cost_temp VALUES
(
p_assignment_id,
p_proportion,
p_old_value,
p_cost_alloc_id,
p_cost_code,
p_flag
);
COMMIT;
ELSIF p_flag = 'P' THEN
DELETE FROM ecost_temp WHERE assignment_id = p_assignment_id;
INSERT INTO cost_temp
SELECT assignment_id,
proportion * 100,
0,
cost_allocation_id,
b.segment1
|| '|'
|| b.segment3
|| '|'
|| b.segment2
|| '|'
|| b.segment4
|| '|'
|| b.segment6,
p_flag
FROM pay_cost_allocations_f a,
pay_cost_allocation_keyflex b
WHERE a.cost_allocation_keyflex_id = b.cost_allocation_keyflex_id
AND a.assignment_id = p_assignment_id
AND sysdate BETWEEN a.effective_start_date AND a.effective_end_date;
COMMIT;
ELSIF p_flag = 'D' THEN
DELETE
FROM cost_temp
WHERE cost_code = p_cost_code
AND proportion = p_proportion;
COMMIT;
END IF;
END;
В приведенном выше запросе я хочу, чтобы всякий раз, когда выполнялся раздел p_flag = 'P', устанавливалось значение переменной. Это должно быть фиксированное значение, к которому я смогу получить доступ при следующем запуске этой процедуры. это возможно?
скажем, например: v_flag = 2, когда выполняется p_flag = 'P'.
и когда эта процедура снова вызывается другим блоком, это значение остается v_flag = 2