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