从临时表中选择时找不到数据

时间:2018-09-04 22:34:08

标签: oracle plsql oracle11g

以下代码块有时会 错误,显示“ ORA-01403:找不到数据”。在第一个查询中,我检索存储在另一个数据库的表中的数据,并将该数据存储到临时表中。在第二个查询中,我从临时表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;

此块并不总是错误。当它确实出错时,第二个查询将不抛出任何数据。

如何调整此代码块,使其永远不会导致“ ORA-01403:找不到数据”错误??我知道我可以将该块包装在BEGIN / EXCEPTION WHEN NO_DATA_FOUND... / END块中,但是理想的解决方案将在 可用时返回临时表的内容

我的环境使用“ Oracle Database 11g企业版11.2.0.4.0版-64位生产”。

1 个答案:

答案 0 :(得分:5)

在插入后检查sql%Rowcount-如果它> 0,则继续,否则执行其他操作。

或者在插入后运行count(*)查询-如果为0,请不要运行select。 。

或添加一个异常块来捕获ORA-01403。