oracle - 从临时表中选择时未找到数据

标签 oracle plsql oracle11g

以下代码块有时会出现“ORA-01403:NO DATA FOUND”错误。在第一个查询中,我检索存储在另一个数据库的表中的数据,并将该数据存储到临时表中。在第二个查询中,我将临时表中的数据选择为局部变量。我必须这样做,因为其中一个字段是 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;

该 block 并不总是出错。当它出错时,第二个查询会抛出 NO DATA FOUND。

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

我的环境使用“Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production”。

最佳答案

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

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

或者添加异常 block 来捕获 ORA-01403。

关于oracle - 从临时表中选择时未找到数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52174791/

相关文章:

sql - 甲骨文中右对齐左零填充?

java - 无法使用 Ebean 使用 GENERATED IDENTITY 主键创建记录

database - 是否可以在 Oracle 11g express on virtualbox 上使用 "impdb"?

oracle11g - ORA-06502 : PL/SQL: numeric or value error: character string buffer

mysql - 有没有办法像Oracle一样将MYsql解释计划显示为树

plsql - 如何从正确的 PLSQL 读取字符串

sql - 在 Oracle 中反转这条路径 z/y/x 到 x/y/z

sql - 将 INTERVAL DAY(0) 格式化为 SECOND(0)

oracle - 同义词和基础表的访问权限

C#:Oracle 数据类型与 OracleDbType 等价