proc中的Oracle查询不返回结果

时间:2011-11-01 10:17:31

标签: c# oracle error-handling plsql

我在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获得结果。只有当它从应用程序调用时,它才会返回结果。 我无法理解这种行为及其根本原因。 你能告诉我如何使这个工作吗?

感谢。

1 个答案:

答案 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;

吞下事件,好像错误从未发生过一样。