以下代码块有时会出现“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企业版版本11.2.0.4.0 - 64位生产”。
插入后检查sql%Rowcount - 如果> 0,则继续,否则执行其他操作。
或者在插入后运行count(*)查询 - 如果为0,则不运行select。 。成。
或者添加一个异常块来捕获ORA-01403。