BEGIN
FOR v_LoadRec IN c_Load LOOP
SELECT count(1) INTO v_NO_OF_DAYS_RESP
from DIM_DATE
where DIM_DATE.TRADING_DAY_FLAG = 'Y' and
DIM_DATE_KEY <= TO_NUMBER(TO_CHAR(v_LoadRec.RESPONSE_DATE,'YYYYMMDD')) and
DIM_DATE_KEY >= TO_NUMBER(TO_CHAR(v_LoadRec.OPEN_DATE, 'YYYYMMDD'))
group by v_LoadRec.CALL_NUMBER;
IF SQL%NOTFOUND THEN
v_NO_OF_DAYS_RESP :='';
END IF;
SELECT count(1) INTO v_NO_OF_DAYS_RESO
from DIM_DATE
where DIM_DATE.TRADING_DAY_FLAG = 'Y' and
DIM_DATE_KEY <= TO_NUMBER(TO_CHAR(v_LoadRec.RESOLVE_DATE,'YYYYMMDD')) and
DIM_DATE_KEY >= TO_NUMBER(TO_CHAR(v_LoadRec.OPEN_DATE, 'YYYYMMDD'))
group by v_LoadRec.CALL_NUMBER;
IF SQL%NOTFOUND THEN
v_NO_OF_DAYS_RESO :='';
END IF;
END LOOP;
У меня есть этот блок SQL в моей процедуре обновления, собирающий счетчик торговых дней для каждой записи, а затем вставляет его в целочисленную переменную с именем «v_NO_OF_DAYS_RESP Exception "например количество дней между открытой и ответной датой вызова.ORA-01403: нет данных найдено - обработка не работает
Это хорошо работает, за исключением случаев, когда есть нулевое «RESPONSE_DATE», где он не работает с ошибкой «ORA-01403: нет данных». Я понимаю, почему он терпит неудачу (потому что он, конечно, не имеет записи для вставки), но я не могу понять, как его обойти.
В этих обстоятельствах, когда «RESPONSE_DATE» признано NULL, я хотел бы, чтобы параметр «v_NO_OF_DAYS_RESP» был установлен равным NULL (или даже каким-то образом имеет инструкцию SQL, вложенную в «IF», чтобы, возможно, полностью избежать запуск вычисления (оператор SQL), когда значение RESPONSE_DATE равно NULL).
* Для того, чтобы поместить это действительно просто, я хочу следующее: .. Если вызов еще не имеет дату ответа, либо не запускать SQL заявление (расчет) или просто установить вар обнулить
Любые идеи или предложения были бы весьма признательны.
Спасибо - Кельвин
Так что я решил проблему, поставив его в операторе IF. См. Мой ответ выше. – Kelvin