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;我在update过程中有这样一段SQL语句,它收集每个记录的交易天数,然后将其插入到一个名为"v_NO_OF_DAYS_RESP“的整数变量中,例如,调用的打开日期和响应日期之间的天数。
除非出现null "RESPONSE_DATE“,并出现"ORA-01403: no data found”错误,否则这种方法工作得很好。我理解它失败的原因(因为它当然没有要插入的记录),但我似乎想不出一种方法来绕过它。
在这些"RESPONSE_DATE“被发现为NULL的情况下,我希望将"v_NO_OF_DAYS_RESP”变量也设置为NULL (或者甚至以某种方式将SQL语句嵌套在"IF“中,以便在"RESPONSE_DATE”为NULL时完全避免运行计算(SQL语句))。
*简单地说,我需要以下内容:..如果调用还没有响应日期,要么不运行SQL语句(计算),要么将var设置为Null
任何想法或建议都将不胜感激。
谢谢-开尔文
发布于 2017-02-01 05:13:58
if (v_LoadRec.RESPONSE_DATE) is null Then
v_NO_OF_DAYS_RESP:='';
else
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;
end if;https://stackoverflow.com/questions/41949665
复制相似问题