相关疑难解决方法(0)

NVL与Coalesce之间的Oracle差异

Oracle中的NVL和Coalesce之间是否存在明显差异?

明显的区别在于coalesce将返回其参数列表中的第一个非null项,而nvl仅接受两个参数,如果不为null则返回第一个,否则返回第二个.

似乎NVL可能只是一个'基础案例'版本的合并.

我错过了什么吗?

sql oracle coalesce nvl

196
推荐指数
7
解决办法
19万
查看次数

JDBC setNull()与Oracle"为null"产生不同的结果

我正在针对Oracle 11g数据库在JDBC上进行PreparedStatement查询,并发现传递null参数的结果与查询本身中定义"is null"不同.

例如,这个查询:

String sql = "SELECT col1 FROM tbl WHERE col2 = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setNull(1, java.sql.Types.INTEGER);
ps.execute();
Run Code Online (Sandbox Code Playgroud)

与此查询不同:

String sql = "SELECT col1 FROM tbl WHERE col2 is null";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setNull(1, java.sql.Types.INTEGER);
ps.execute();
Run Code Online (Sandbox Code Playgroud)

我很好奇为什么会这样,我怎么能避免定义两个单独的SQL语句来涵盖"col2 = value"和"col2 is null"的情况.

java oracle null jdbc

3
推荐指数
1
解决办法
5047
查看次数

在查询中使用set null的Prepared语句不返回任何记录

我使用预准备语句来读取/写入我的数据库(SQLite)中的数据.在我的表中INVENTORY,有一些记录null在列中有值paleta(列VARCHAR在表中定义).我想选择这些记录,我试过:

sq = "SELECT * FROM INVENTORY WHERE paleta = ? AND product = ? AND lot = ?";
//...
stm = c.prepareStatement(sq);
stm.setNull(1, java.sql.Types.VARCHAR);
stm.setString(2, "theIdOftheProduct");
stm.setString(3, "theLotOftheProduct");

ResultSet rs = stm.executeQuery();
Run Code Online (Sandbox Code Playgroud)

上面的查询没有返回任何东西..我删除了paleta = ?,我得到了我想要的记录..如何SELECT * FROM INVENTORY WHERE paleta is null etc..使用查询参数定义查询?

java jdbc prepared-statement

1
推荐指数
1
解决办法
292
查看次数

标签 统计

java ×2

jdbc ×2

oracle ×2

coalesce ×1

null ×1

nvl ×1

prepared-statement ×1

sql ×1