ソートするカラム、方向を切り替える


ストアドで使用するカーソルをパラメタの値によってソートする項目、及びソート方向を切り替える例。
どうしても動的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