Как вернуть 01 номер транзакции каждый год - PullRequest
0 голосов
/ 25 февраля 2019

Я пытался вернуть номер транзакции 01 каждый год, но безуспешно.Это процедура, которую я использую.

Найти последнюю номер транзакции:

SELECT   COUNT (NOKAS) AS JUMLAH
  INTO   V_JML_RECORD
  FROM   D_MSTHEADER_UKERJA
 WHERE   KTRASL = V_KDKTR;

Каждая транзакция добавляет +1 к NOKAS:

IF ( V_JML_RECORD = 0)
THEN
   V_JML_RECORD := 1;
ELSE
   V_JML_RECORD := V_JML_RECORD + 1;
END IF;

V_NOKAS := V_JML_RECORD;
IF LENGTH (V_JML_RECORD) = 1
THEN
    V_NOKAS_SBL_REKON := '000' || V_JML_RECORD;
END IF;
IF LENGTH (V_JML_RECORD) = 2
THEN
    V_NOKAS_SBL_REKON := '00' || V_JML_RECORD;
END IF;
IF LENGTH (V_JML_RECORD) = 3
THEN
    V_NOKAS_SBL_REKON := '0' || V_JML_RECORD;
END IF;
IF LENGTH (V_JML_RECORD) = 4
THEN
    V_NOKAS_SBL_REKON := V_JML_RECORD;
END IF;

Формат номера транзакции:

      || P_BULANTHNSKRG (MMYY)
      || '-'
      || V_NOKAS_SBL_REKON
      || '-'
      || 'PK';

1 Ответ

0 голосов
/ 25 февраля 2019

Вам не нужна логика IF для этой части:

IF ( V_JML_RECORD = 0)
THEN
    V_JML_RECORD := 1;
ELSE
    V_JML_RECORD := V_JML_RECORD + 1;
END IF;

, поскольку вторая ветвь все равно будет обрабатывать ноль;так что вы можете просто сделать одно утверждение:

V_JML_RECORD := V_JML_RECORD + 1;

Тогда ваша логика для добавления переменного числа нулей может быть заменена одной командой форматирования:

V_NOKAS := TO_CHAR(V_JML_RECORD, 'FM0000');

Четыре нуля вмодель формата означает, что число 1 становится строкой '0001', причем модификатор формата FM подавляет начальные пробелы, которые вы получите по умолчанию, чтобы разрешить для номинального знака +/-.

Вы можете сделатьвсе это тоже в запросе, в зависимости от того, нужно ли вам исходное значение или вы используете его только для вычисления вашей окончательной строки:

SELECT TO_CHAR(COUNT(NOKAS) + 1), 'FM0000')
INTO V_NOKAS_SBL_REKON
FROM D_MSTHEADER_UKERJA
WHERE KTRASL = V_KDKTR;

или если вам нужны промежуточные значения для других вещей, вы можете получить ихвсе:

SELECT COUNT(NOKAS), COUNT(NOKAS) + 1, TO_CHAR(COUNT(NOKAS) + 1), 'FM0000')
INTO V_JML_RECORD, V_NOKAS, V_NOKAS_SBL_REKON
FROM D_MSTHEADER_UKERJA
WHERE KTRASL = V_KDKTR;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...