【问题标题】:NO DATA FOUND when selecting from temporary table从临时表中选择时未找到数据
【发布时间】: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?是不是有时您使用不返回任何行的条件查询远程视图?如果是这样,你不想知道吗?

标签: oracle plsql oracle11g


【解决方案1】:

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

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

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

【讨论】:

  • 我认为检查sql%Rowcount 是最好的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多