2010-02-04 65 views
0

我聲明瞭顯式遊標,但是,我需要根據用戶交互以不同的順序排列SQL。要排序的列作爲參數傳遞給過程,但是,我很難將它合併到遊標的sql中(盡我所知,它將變量名稱解釋爲列的名稱, ?因此不受任何訂貨PL/SQL在顯式遊標語句中使用變量

是否有顯式遊標語句中使用本地聲明的變量的方式

這裏就是我試圖迄今的基本骨架:

v_order_by varchar2(100) := <function that grabs URL param> 
c_cursor is 
select... 
. 
. 
. 
order by v_order_by; 

任何不勝感激。所有使用我目前發現的顯式遊標的例子完全沒有幫助。

回答

2

如果v_order_by的可能值是靜態的,你可以這樣做:

order by case v_order_by 
      when 'EMPNO' then empno 
      when 'DEPTNO then deptno 
      end 

否則,你將需要使用動態SQL和REF CURSOR:

declare 
    v_refcursor sys_refcursor; 
    ... 
begin 
    open v_refcursor for 
    'select... 
    order by ' || v_order_by; 

如果你這樣做,請務必學習如何在動態SQL where子句中使用綁定變量而不是文字。

+0

感謝您的幫助。不幸的是,案例陳述似乎要求所有可能的值都是相同的類型。這對我不起作用,因爲我有幾列需要像數字一樣排序,而其他的則需要像字符串一樣排序。我最終將所有內容都更改爲引用光標。 再次感謝。 – 2010-02-04 19:07:13

+0

您可以*將字符串和數字排序在一起,您只需將數字轉換爲字符串即可。 TO_CHAR(mynum,'fm00000000')將用零填充整數,以便在按字母順序排序時正確排序。 – 2010-02-05 01:14:14