Вам не нужна логика 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;