Sql调用的Java方法和执行顺序
我目前正在hsqldb中使用sql调用的java函数。 这个问题看起来很棘手,我想这可能是由于sql语句不同部分的执行顺序造成的。但我希望有人知道另一种解释 基本思想是: 我想检查表A的第1列是否大于第2列 问题是: 我必须将字符串列转换为整数。如果存在强制转换问题,则语句不应中止 我的解决方案不起作用: 我选择所有可以安全转换的行。其余的行被转换为int,可以进行比较 例如:Sql调用的Java方法和执行顺序,java,sql,hsqldb,Java,Sql,Hsqldb,我目前正在hsqldb中使用sql调用的java函数。 这个问题看起来很棘手,我想这可能是由于sql语句不同部分的执行顺序造成的。但我希望有人知道另一种解释 基本思想是: 我想检查表A的第1列是否大于第2列 问题是: 我必须将字符串列转换为整数。如果存在强制转换问题,则语句不应中止 我的解决方案不起作用: 我选择所有可以安全转换的行。其余的行被转换为int,可以进行比较 例如: select * from( select * from A INNER JOIN B ON A.num=B_
select * from(
select * from A INNER JOIN B ON A.num=B_num WHERE checkCast(A.one, B.type) = TRUE and checkCast(A.two, B.type) = TRUE
) WHERE cast(A.one as int) > cast(A.two as int)
checkCast是一个Java函数,它根据B.type检查参数a.one和a.two是否具有正确的格式和范围
编辑:这些表如下所示:
A
num one two
123 1 2
123 x 2
B
num type
123 int500
不幸的是,我从中得到了一个SqlDataException。如果我执行以下操作,它将起作用:
1将B.type替换为如下直接输入:checkCastA.one,“int500”
2或者在同样使用B.type的函数中进行比较
我猜在内部select语句完成之前,外部select语句必须以某种方式访问数据
谢谢你的建议 这是在HSQLDB帮助论坛上询问和回答的: 基本上,查询优化程序决定何时计算每个表达式。您可以将CHECKCAST函数替换为用SQL或JAVA编写的函数来执行比较,同时考虑任何空值或无法强制转换的值,方法是在内部捕获异常并返回结果