정렬관련 질문드립니다. 0 3 2,473

by 개발뉴비 [SQL Query] 정렬 order by 프로시저 파라메터 [2014.12.04 16:21:30]


정렬관련 작업하다가 막히는 부분이 있어서 질문 드립니다.

프로지서 변수로 v_S1 등의 변수를 받아서 정렬을 처리하고 있습니다.

그런데 변수의 갯수가 많아지면서 쿼리가 너무 길어지는게 보기가 안좋더라고요...

변수를 받을 때 정렬 문자열 자체를 파라메터 변수로 받아서 처리하는 방법이 있을까요?

SELECT * FROM tmp_Table ORDER BY
                (CASE WHEN SUBSTR(v_S1,-1) = 'A' THEN
                    (CASE SUBSTR(v_S1,1,INSTR(v_S1,'|',1)-1)
                        WHEN 'DEPT' THEN DECODE(i_DEPTTYPE, 'DutDeptCd', DUTDEPTNM, POSDEPTNM)
                        WHEN 'DIST' THEN OCPDISTNM
                        WHEN 'TYPE' THEN OCPTYPENM
                        WHEN 'GRD'  THEN OCPGRDNM
                        WHEN 'POS'  THEN OCPPOSNM
                    END)
                END) ASC,
                (CASE WHEN SUBSTR(v_S1,-1) = 'D' THEN
                    (CASE SUBSTR(v_S1,1,INSTR(v_S1,'|',1)-1)
                        WHEN 'DEPT' THEN DECODE(i_DEPTTYPE, 'DutDeptCd', DUTDEPTNM, POSDEPTNM)
                        WHEN 'DIST' THEN OCPDISTNM
                        WHEN 'TYPE' THEN OCPTYPENM
                        WHEN 'GRD'  THEN OCPGRDNM
                        WHEN 'POS'  THEN OCPPOSNM
                    END)
                END) DESC,

by 마농 [2014.12.04 16:31:58]
-- 동적 쿼리를 이용하세요.
sql_stmt := 'SELECT * FROM tmp_Table ORDER BY ';
sql_stmt := sql_stmt || REPLACE(REPLACE(v_S1, '|A', ' ASC'), '|D', ' DESC');
-- 참고 : http://www.gurubee.net/article/19612

 


by 개발뉴비 [2014.12.04 16:55:38]

마농님 감사합니다.

저도 동적쿼리 생각을 해 봤는데... 쿼리가 너무 길어서 동적쿼리로 변경하는 작업도 일이네요^^;;

혹시 다른 방법이 없을까요??


by 마농 [2014.12.04 17:13:46]

Case 문을 Select 절로 올려 Alias 를 주면...

2번 반복 사용한 Case 를 한번만 쓰면 되겠네요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입