3
我需要替换变量进行排序,以便我可以稍后再引用它们是这样的:甲骨文排序替代变量
WITH
vars AS (SELECT SORT(:var1,:var2, :var3) FROM DUAL)
SELECT least_var, greater_var, greatest_var FROM vars;
我需要替换变量进行排序,以便我可以稍后再引用它们是这样的:甲骨文排序替代变量
WITH
vars AS (SELECT SORT(:var1,:var2, :var3) FROM DUAL)
SELECT least_var, greater_var, greatest_var FROM vars;
既然你有替代变量,你显然有一些宿主语言。因此,一种方法是在调用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
创建一种功能,你建议将没有真正的工作作为一个函数无法返回,供应结构为三列。如果你想使用函数,那么使用它们中的三个:内置函数LEAST和GREATEST以及用户定义的函数GREATER。
当然,您可以创建返回3列结果集的函数。但是你会像使用表一样使用:'select * from sort(:var1,:var2,:var3)' –
@Codo,谢谢。我猜SQL解决方案无论如何都是相当丑陋的,但在主机语言中排序有一个缺点:如果其他人使用我的查询(这只是一个更大的查询中的一个片段)忘记对变量进行排序,他们会得到错误的结果。 – jFrenetic