Oracle排序替换变量

时间:2011-09-02 10:35:55

标签: sql oracle oracle10g

我需要对替换变量进行排序,以便稍后可以像这样引用它们:

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

1 个答案:

答案 0 :(得分: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函数实际上不会起作用,因为函数不能返回一个作为三列的构造。如果你想使用函数,那么使用其中的三个:内置函数LEAST和GREATEST以及一个名为GREATER的用户定义函数。