SELECT Tbl.*,
ROWNUM RN1
FROM
(
SELECT DISTINCT(LEAVEID),
LEAVECODE,
LEAVENAME,
DESCRIPTION,
STATUS
FROM HRM_LEAVECONFIGURATION
WHERE
(
(
:LEAVENAME IS NULL OR
UPPER(LEAVENAME) LIKE UPPER(:LEAVENAME)
)
AND
(
:STATUS IS NULL OR
STATUS = :STATUS
)
AND
(
ISFIXED <> 1 OR
ISFIXED IS NULL
)
AND
(
:LEVECODE IS NULL OR
UPPER(LEAVECODE) = UPPER(:LEVECODE)
)
)
ORDER BY(
CASE
(
SELECT t.data_type
FROM user_tab_columns t
WHERE t.TABLE_NAME = 'HRM_LEAVECONFIGURATION' AND
t.COLUMN_NAME = 'LEAVENAME'
)
WHEN 'VARCHAR2'
THEN 'UPPER(LEAVENAME)'
ELSE 'LEAVENAME'
END) DESC
)
Tbl
이것은 문제가있는 코드입니다.오라클에서 쿼리 결과를 어떻게 동적으로 정렬 할 수 있습니까?
여기에서 필자는 대문자를 입력하고 싶은 필드의 데이터 형식에 따라 매개 변수로 필드 이름을 전달합니다.
예 : leavename의 데이터 유형이 varchar2 인 경우 leavename의 데이터 유형이 varchar가 아닌 경우 leavename의 데이터 유형이 varchar가 아닌 경우 상위 (leavename) 내림차순으로 정렬 한 다음 leavename 만 정렬하십시오.
여기 내 문제는이 쿼리가 작동하지만 주문하지 않습니다. 다른 제안이 있습니까?
'order by'부분에서 'select'부분에 사용하는 것과 동일한 내용을 추가하여 실제 값이 무엇인지 확인할 수 있습니다. – zerkms
[IS NULL OR appraoch의 성능 문제] (http://use-the-index-luke.com/sql/where-clause/obfuscation/smart-logic)로 인해 동적 SQL을 사용하도록 선택할 수도 있습니다. 이 경우 앱에서 ORDER BY 절도 결정할 수 있습니다. –