Oracle因 Cursor 造成Hint失效

Oracle因Cursor造成Hint失效

SQL語法

1
2
3
4
5
String sql = "SELECT /*+ INDEX (table table_index) */ userid "
+ "FROM table WHERE userid=?";

ps = conn.prepareStatement(sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE,
ResultSet.CLOSE_CURSORS_AT_COMMIT);

執行的結果

1
2
select rowid as "Oracle_JDBC_interal_ROWID", /*+ INDEX (table table_index) */ userid
FROM table WHERE userid=:1

結論

1
使用cursor的方式執行sql,jdbc 會自動塞入rowid 在select 後面,導致原本應該直接在select後面的hint失效。