proc中的Oracle查询不返回结果
Posted
技术标签:
【中文标题】proc中的Oracle查询不返回结果【英文标题】:Oracle query in a proc not returning results 【发布时间】:2011-11-01 10:17:30 【问题描述】:我在从 C# 程序调用的 Oracle[10g] 存储过程中有这个 Pl/sql 查询。:
SELECT a,b
FROM t1, t2
WHERE
t1.Id=t2.Id
AND NVL (TO_CHAR (t1.externalId), t2.product_name) = prm_product_name
prm_product_name 是 proc 的输入参数,声明为:
prm_product_name VARCHAR2
应用程序将“1000”或“2000”等作为输入参数值传递给 proc,并且能够在我的 C# 应用程序中成功获取查询结果。 但是当应用程序通过一个特定的数字比如 1500 时,查询不会返回任何记录。我也没有在应用程序中看到任何 oracle 异常。 当我像下面这样修改语句时,重新编译proc,然后查询proc返回结果。
AND NVL (TO_CHAR (t1.externalId), t2.product_name) = '1500'
另外,当我使用 sql 编辑器调用它时,我能够从 proc 中获取结果[没有硬编码 1500]。只有从应用程序调用它时,它才不会返回结果。 我无法理解这种行为及其根本原因。 你能告诉我如何让它工作吗?
谢谢。
【问题讨论】:
如果不查看存储过程中的所有代码,很难诊断出您描述的行为。 那个特定的数字是 1500?请张贴程序和那个号码 【参考方案1】:我们希望您的程序在这种情况下抛出 NO_DATA_FOUND。
为什么不呢?如果没有看到整个存储过程的代码,很难说,但钱会花在执行不力的异常部分上。像这样的东西,它记录错误但不传播异常:
EXCEPTION
WHEN no_data_found THEN
write_error_log('no data for Product Name='||prm_product_name);
END;
甚至是恐惧
EXCEPTION
WHEN others THEN
null;
END;
它吞噬了事件,就好像错误从未发生过一样。
【讨论】:
感谢 APC 提供您的输入。但是我只是想知道,当从 sql 编辑器运行产品名称“1500”时,proc 怎么会给出结果?只有当它从应用程序调用时,它才会返回0 个结果。这让我感到困惑。 那也会让我感到困惑。很简单,你必须做一些你没有告诉我们的事情。例如,您的 C# 应用程序是否与您的 SQL 编辑器指向同一个数据库。以上是关于proc中的Oracle查询不返回结果的主要内容,如果未能解决你的问题,请参考以下文章