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();
このクエリとは異なります。
String sql = "SELECT col1 FROM tbl WHERE col2 is null";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setNull(1, java.sql.Types.INTEGER);
ps.execute();
なぜそうなるのか、また、「col2 = value」と「col2 is null」の両方のケースをカバーするために 2 つの別々の SQL ステートメントを定義しないようにする方法に興味があります。