【发布时间】:2019-04-22 20:06:27
【问题描述】:
我正在开发一个 Web 应用程序(java-maven 项目),但我使用的查询存在问题。我的网络应用程序的 UI 有 2 个搜索字段:PTT 和 ID。
用户需要填写至少一个字段才能进行搜索。所以这两个字段都可以为空,但不能同时为空。
之前,我只有一个字段:PTR,它显示了一个大小为 52 的结果数组。(如果
我执行select * from users where ptr='smthing')。之后我添加了ID 字段并更新了我的查询如下:
我在我的网络服务中执行这个查询:
String query= "SELECT t.ptr, t.id ";
query+= "FROM users t ";
query+= "WHERE t.ptr = COALESCE(?, t.ptr) AND " ;
query+= "t.id = COALESCE(?, t.id) ";
并借助 Prepared Statement 设置字段。
现在如果 ptr 字段已填充,但 id 字段在 UI 上留空(可以是 null 或空字符串)并且用户进行搜索,结果数组大小变为 30。我与数据库进行了比较
它不会获取ID 为空的行。所以coalesce 的两个参数 (?, t.ptr) 都为空时,我不需要它。
我该如何解决这个问题,有什么建议吗?
【问题讨论】:
-
什么数据库?甲骨文?
-
顺便说一下,PL/SQL Developer 不是 Oracle 产品,PL/SQL 也不是查询语言。