2011-09-02 5 views
3

은 내가 이런 식으로 나중에 참조 할 수 있도록 대체 변수를 정렬해야합니다 당신은 대체 변수를 가지고 있기 때문에오라클 정렬 대체 변수

WITH 
vars AS (SELECT SORT(:var1,:var2, :var3) FROM DUAL) 
SELECT least_var, greater_var, greatest_var FROM vars; 

답변

2

, 당신은 분명히 어떤 호스트 언어가 있습니다. 따라서 한 가지 방법은 SQL 쿼리를 호출하기 전에 호스트 언어로 세 값을 정렬하는 것입니다.

또 다른 방법은 다음 쿼리를 사용하는 것입니다 (예를 들어 WITH 절과 함께) : 당신이 기능을 제공하는 구조를 반환 할 수 없으므로 정말 작동하지 않습니다 제안으로

select 
    least(:var1, :var2, :var3) as least_var, 
    case 
     when :var2 < :var1 and :var1 < :var3 
     or :var2 > :var1 and :var1 > :var3 then :var1 
     when :var1 < :var2 and :var2 < :var3 
     or :var1 > :var2 and :var2 > :var3 then :var2 
     else :var3 
    end as greater_var, 
    greatest(:var1, :var2, :var3) as greatest_var 
from dual 

는 SORT 기능 만들기 3 개의 열로. 함수를 사용하려면 내장 함수 LEAST 및 GREATEST와 GREATER라는 사용자 정의 함수를 사용하십시오.

+0

물론 3 열로 결과 집합을 반환하는 함수를 만들 수 있습니다. 그러나 마치 테이블 인 것처럼 사용할 수 있습니다 :'select * from sort (: var1, : var2, : var3)' –

+0

@Codo, 고마워. 나는 SQL 솔루션이 어쨌든 상당히 추악 할 것 같지만 호스트 언어로 정렬하는 것은 한 가지 단점이있다. 다른 누군가가 내 쿼리를 사용하면 (그리고 훨씬 더 큰 쿼리의 스 니펫 일 뿐이다) 변수를 정렬하는 것을 잊어 버리면 잘못된 결과를 얻게된다. . – jFrenetic