ストアドで使用するカーソルをパラメタの値によってソートする項目、及びソート方向を切り替える例。
どうしても動的SQLを使用したくない場合などに以下の方法で実現可能。
ただし、以下の点に注意
・レスポンスは無視しているのでINDEXにはたぶん当たらないので注意。
・ソート方向を カラムの値 * -1 することで実現しているので対象のカラムの値に数字以外が含まれるとエラーになります(ORA-01722)。
--SET SERVEROUTPUT ON DECLARE CURSOR csrHOGE ( vCOL CHAR, vSORT CHAR ) IS SELECT t_hoge.WRTDT , t_hoge.WRTTM FROM t_hoge ORDER BY (CASE vCOL WHEN '1' THEN (CASE vSORT WHEN '1' THEN TO_NUMBER(WRTDT) ELSE TO_NUMBER(WRTDT) * -1 END) WHEN '2' THEN (CASE vSORT WHEN 'ASC' THEN TO_NUMBER(WRTTM) ELSE TO_NUMBER(WRTTM) * -1 END) END) ASC ; R_HOGE csrHOGE%ROWTYPE; BEGIN --第1引数 vCOL でorder by するカラムを指定,第2引数でDESC,ASCの指定 OPEN csrHOGE('2','DESC'); LOOP FETCH csrHOGE INTO R_HOGE; EXIT WHEN csrHOGE%NOTFOUND; DBMS_OUTPUT.PUT_LINE(R_HOGE.WRTDT || '-' ||R_HOGE.WRTTM); END LOOP; CLOSE csrHOGE; END; /
動作確認環境:Oracle 11g