2011-07-20 98 views
0

我想用命名查询调用PL/SQL函数。 其中一个参数会导致我出现问题。在PL/SQL定义中,它的类型是NUMBER。 下面是它设置的Java代码: q.setParameter (Test.DISTRICT_ID_PARAM,districtId);districtIdLong当Oracle存储函数的一个参数为空时抛出异常

districtId不为空,一切正常,但是当它是零,这是结果: org.hibernate.exception.SQLGrammarException: could not execute query

我敢肯定有各式各样的管道没有问题,因为查询效果很好,当districtId不为空。

回答

0

我并不熟悉Java或Hibernate,但是在我写的Oracle应用程序中,我遇到了类似于空参数(C#)的行为 - 如果Java有这个概念,是否尝试过设置参数值是DB null(在C#DBNull.Value中)?

如果该值为空,我认为Oracle将其解释为根本不传递参数。

+0

DB函数接受另外3个VARCHAR2类型的参数。我将它们设置为与前一个相同,即使它们为空,一切正常。我试图找出的是NUMBER参数是否有不同之处。 –

+0

@RaduStoenescu:从PL/SQL参数传递的角度来看,传递null参数来输入varchar2或number时没有什么区别。 – user272735

+0

@MarkWatts:如果您将具有空值的参数传递给PL/SQL函数,则该函数会看到该参数并且该参数的值为空。 – user272735

相关问题