【发布时间】:2019-02-09 23:44:02
【问题描述】:
以下代码块有时会出现“ORA-01403: NO DATA FOUND”错误。在第一个查询中,我检索存储在另一个数据库的表中的数据,并将该数据存储到一个临时表中。在第二个查询中,我从临时表中选择数据 INTO 一个局部变量。我必须这样做,因为其中一个字段是 CLOB 和 it is not possible to select a CLOB into a local variable across a database link。
-- insert clob from remote database into temp table across database link
-- it will be deleted upon implicit commit when the report ends;
INSERT INTO tmp_xml_result
SELECT add_id, site_cd, result_txt
FROM vw_add_result@ADifferentServer
WHERE add_id = p_add_id
AND site = p_site;
-- now that clob is local, we can select it into a variable
SELECT xml
INTO v_xml
FROM tmp_xml_result
WHERE id = p_add_id
AND site = p_site;
这个块并不总是出错。当它出错时,第二个查询会抛出 NO DATA FOUND。
如何调整此代码块,使其永远不会导致“ORA-01403: NO DATA FOUND”错误?我知道我可以将代码块包装在 BEGIN / EXCEPTION WHEN NO_DATA_FOUND... / END 块中,但是理想的解决方案是在临时表的内容可用时返回它们。
我的环境使用“Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production”。
【问题讨论】:
-
“但理想的解决方案将在临时表的内容可用时返回它们。” - 你能详细说明一下吗?我认为使用 EXCEPTION 块来处理 no_data_found 会是一个更好的主意。
-
为什么你的代码偶尔会抛出 NO_DATA_FOUND?是不是有时您使用不返回任何行的条件查询远程视图?如果是这样,你不想知道吗?