次の操作を実行するための同等のOracle(11g)コードは何でしょうか。
MySQLの場合
ps = con.prepareStatement("select SQL_CALC_FOUND_ROWS from student_details where UPPER(name) like UPPER(?) limit " + offset + ", " + noOfRecords);
とrs = ps.executeQuery("SELECT FOUND_ROWS()");
次の操作を実行するための同等のOracle(11g)コードは何でしょうか。
MySQLの場合
ps = con.prepareStatement("select SQL_CALC_FOUND_ROWS from student_details where UPPER(name) like UPPER(?) limit " + offset + ", " + noOfRecords);
とrs = ps.executeQuery("SELECT FOUND_ROWS()");
次のようにしてみてください。
SELECT *
FROM (select t.*, rownum rn, count(*) over() as SQL_CALC_FOUND_ROWS
from student_details t
where UPPER(name) like UPPER(?))
WHERE rn <= offset
WHERE rn <= offset
「SQL_CALC_FOUND_ROWS」で返される値は、句がない場合に選択されたレコードの数になります。
あなたのステートメントで私が目にするRDBMS固有のものは、「upper()」と「limit」の2つだけです。
「制限」の回避策として Oracle の「rownum」を使用するためのリンクを次に示します。
「Upper()」は、Oracle でそのまま正常に動作するはずです。