Изменить значение переменной в pl / sql - PullRequest
0 голосов
/ 19 сентября 2018

Я запускаю сценарий Unix * _sh, но с методами, которые используют pl / sql в нем.

Метод в сценарии:

method(){

sqlplus -s ${DB_CONNECTION} << EOF
set echo on;
set timing on;
set serveroutput on;

DECLARE
      v_monthNow Date:=to_date('2018-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS');
      v_charMonthNow Varchar(5):=to_char(v_monthNow,'MM');
      v_charMonthBefore Varchar(5) :=to_char(v_monthNow, 'MM')-1;

BEGIN
      dbms_output.Put_line('SYSDATE is '|| v_monthNow ||' || MonthNow is '|| v_charMonthNow);
      IF v_charMonthBefore = '0'
           set v_charMonthBefore = '12'
           dbms_output.Put_line('MonthBefore is '|| v_charMonthBefore);
      ELSE
           dbms_output.Put_line('MonthBefore is '|| v_charMonthBefore);

END;
/
EOF
}

Мой вопрос: как мне установитьзначение v_charMonthBefore, что я хочу?

На самом деле, если sysdate равно Jan 2018, мне нужно v_monthNow=1 и v_charMonthBefore=12

, если sysdate равно Feb 2018, мне нужноv_monthNow=2 и v_charMonthBefore=1

Другой способ сделать это не требуется, мне просто нужно исправить то, что у меня есть сейчас, так как я не очень знаком с pl / sql.Спасибо

1 Ответ

0 голосов
/ 19 сентября 2018

Используйте CASE для определения правильного значения.

Мой CTE здесь только для того, чтобы создавать все 12 месяцев в году.Вам нужны строки 7 - 10.

SQL> with test as
  2    (select to_number(to_char(add_months(trunc(sysdate, 'yyyy'), level - 1), 'mm')) mon
  3     from dual
  4     connect by level <= 12
  5    )
  6  select
  7    mon as v_month_now,
  8    case when mon = 1 then 12
  9         else mon - 1
 10    end as v_month_before
 11  from test;

V_MONTH_NOW V_MONTH_BEFORE
----------- --------------
          1             12
          2              1
          3              2
          4              3
          5              4
          6              5
          7              6
          8              7
          9              8
         10              9
         11             10
         12             11

12 rows selected.

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...