【发布时间】:2017-06-16 10:08:19
【问题描述】:
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”的整数变量中,例如呼叫的打开日期和响应日期之间的天数。
这很好用,除非有一个空的“RESPONSE_DATE”,它会因为“ORA-01403:没有找到数据”错误而失败。我理解它为什么会失败(因为它当然没有要插入的记录),但我似乎无法找到绕过它的方法。
在发现“RESPONSE_DATE”为 NULL 的这些情况下,我希望也将“v_NO_OF_DAYS_RESP”变量设置为 NULL(或者甚至以某种方式将 SQL 语句嵌套在“IF”中以可能完全避免运行"RESPONSE_DATE" 为 NULL 时的计算(SQL 语句)。
*简单来说,我想要以下内容:.. 如果调用还没有响应日期,要么不运行 SQL 语句(计算),要么将 var 设置为 Null
任何想法或建议将不胜感激。
谢谢 - 开尔文
【问题讨论】:
标签: oracle stored-procedures oracle11g cursor