作为复合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端是否为零?
答案 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 ....