Вы можете использовать PL / SQL анонимный блок, который был бы проще:
SET SERVEROUTPUT ON
DECLARE
v_report_month NUMBER := 1;
v_report_year NUMBER := 2020;
v_start_year NUMBER;
BEGIN
v_start_year :=
CASE
WHEN v_report_month > 1 THEN
v_report_year - 2
ELSE v_report_year - 3
END;
dbms_output.put_line('Start year: '||v_start_year);
END;
/
Start year: 2017
PL/SQL procedure successfully completed.
То же самое выражение CASE может быть написано с использованием IF-THEN-ELSE :
IF v_report_month > 1 THEN
v_start_year := v_report_year - 2;
ELSE
v_start_year := v_report_year - 3;
END IF;
Если вы хотите оставить переменные, которые вы определили в SQL* Plus, то вы можете сделать это следующим образом:
define v_report_month = 1
define v_report_year = 2020
set serveroutput on
DECLARE
v_report_year NUMBER;
v_start_year NUMBER;
BEGIN
v_start_year :=
CASE
WHEN &v_report_month > 1 THEN
&v_report_year - 2
ELSE &v_report_year - 3
END;
dbms_output.put_line(v_start_year);
END;
2017
PL/SQL procedure successfully completed.