我在Oracle [10g]存储过程中的这个Pl / sql查询是从C#程序调用的。:
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
App将'1000'或'2000'等作为输入参数值传递给proc,并且能够在我的C#app中成功获取查询结果。 但是,当应用程序传递一个特定的数字,如1500,查询不会返回任何记录。我也没有在应用程序中看到任何oracle异常。 当我修改如下所示的语句时,重新编译proc,然后查询proc返回结果。
AND NVL (TO_CHAR (t1.externalId), t2.product_name) = '1500'
此外,当我使用sql编辑器[没有硬编码1500]调用它时,我能够从proc获得结果。只有当它从应用程序调用时,它才会返回结果。 我无法理解这种行为及其根本原因。 你能告诉我如何使这个工作吗?
感谢。
答案 0 :(得分:0)
我们希望你的程序在这种情况下抛出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;
吞下事件,好像错误从未发生过一样。