【发布时间】:2020-04-01 21:50:22
【问题描述】:
以下是在主块中找不到数据时必须执行异常块的代码。但是,即使查询没有返回任何记录,异常块也不会被执行。查询与另一个表连接,当结果与查询匹配时,它将选择第一条记录,否则它必须为字段分配空值并将光标返回给 UI。光标下面的计数始终为 0,并且异常块没有被执行。
BEGIN
wf_common.write_debug(vprocname, ' 111=', ts);
OPEN cinfo FOR SELECT
name,
phone,
alt_phone,
email
FROM
abc
WHERE
id IN (
SELECT
id
FROM
xyz
WHERE
emp_no = vempno
)
AND name IS NOT NULL
AND ROWNUM = 1;
wf_common.write_debug(vprocname, 'COUNT' || cinfo%rowcount, ts);
EXCEPTION
WHEN no_data_found THEN
wf_common.write_debug(vprocname, '222=', ts);
OPEN cinfo FOR SELECT
'' name,
'' phone,
'' alt_phone,
'' email
FROM
dual;
wf_common.write_debug(vprocname, 'COUNT' || cinfo%rowcount, ts);
END;
【问题讨论】:
-
您是否尝试无异常块运行这个?
-
@HimanshuAhuja 是的,我做到了。结果是一样的。找到数据时游标返回1条记录,当表中没有满足条件的记录时,游标为空。我的要求是为字段返回空值,如果找不到记录,游标仍应保留 1 条带有空字段的记录。
-
如果你不打算循环你的结果,为什么要打开光标呢?只需将 s
SELECT COUNT(*)转换为INTEGER变量即可。然后有一个 if-else 来打印你的消息。