使用JPQL从DB2返回布尔值

时间:2015-04-21 22:21:55

标签: java sql db2 jpql

作为复合JPQL查询的一部分,我使用的是子选择

(select count(obj)=0 from TABLE_NAME obj where obj.id = outerObject.id) 

如果在TABLE_NAME中删除了对象,则应返回布尔值。使用H2运行时效果很好,但在运行DB2 9.7.0.4时出现语法错误。

我已经尝试在两个数据库上执行一些类似的裸sql查询,H2会毫无问题地执行所有这些查询,但我无法在DB2中返回boolean,例如

SELECT count(*)=0 from TABLE_NAME

失败,语法错误以及

SELECT 1=0 from TABLE_NAME

IBM说布尔类型是在9.7中引入的,但我对使用感到困惑。页面http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.apdv.sqlpl.doc/doc/c0053651.html表示

  

布尔数据类型只能引用为:(...)返回类型

但它也说

  

无法在结果集中返回布尔数据类型。

是否可以在DB2中执行布尔返回查询,或者我是否必须将count(*)返回给Java并检查Java端是否为零?

2 个答案:

答案 0 :(得分:0)

您可以将其替换为存在查询:

WHERE NOT EXISTS (select obj from TABLE_NAME obj where obj.id = outerObject.id) 

也应将count(obj)值0解释为false,这样你就可以简单地否定

答案 1 :(得分:0)

您可以创建一个udf(用户定义函数)来解析布尔值并返回一个字符串

Create function bool_to_char (boolean value) return char (5)
Begin
 Declare ret char (5) default 'false';
 If (value is true) then
  Set ret = 'true';
  End if;
  Return ret;
 End@

您使用功能

调用相同的选择
Select bool_to_char (xxx) from ....