2012-05-04 22 views
0

我正在使用PL/SQL。我正在向我的程序發送一些參數。其中一個參數應該是一個列名。最初它是一個varchar2,但我想在我的遊標中使用它來引用列名。這怎麼可能?PL/SQL光標使用參數作爲列名

這是我的代碼看起來是這樣的:

PROCEDURE proc_name(x IN VARCHAR2, y IN VARCHAR2) IS 

     cursor csr IS 
     SELECT * 
     FROM table 
     SORT BY x y 


    BEGIN 
     for y in csr loop 
     ------ 
     end loop; 

    END proc_name; 

我試圖研究這個在過去的幾天,沒有運氣。我研究了動態SQL,這是正確的方向嗎?似乎沒有爲我工作。

預先感謝任何幫助

+0

是,動態SQL是答案,但你在危險的SQL注入的領土。想象一下,如果有人打電話給你的程序,如'proc_name('(select emp from where where ='My Manager'')'' –

+2

@TonyAndrews - 對誰危險?每個人都應該知道他們的經理賺了什麼! – APC

+0

@Tony Andrews Would你能向我展示一個例子嗎?我嘗試過的每個人都沒有爲我工作 – user1375026

回答

2

試試這個:

PROCEDURE proc_name(x IN VARCHAR2, y IN VARCHAR2) IS 

    rc sys_refcursor; 

    r_table table%rowtype; 

BEGIN 
    open rc for 
    'SELECT * 
    FROM table 
    ORDER BY ' || x || ' ' || y; 
    loop 
    fetch rc into r_table; 
    exit when rc%notfound; 
    ------ 
    end loop; 
    close rc; 

END proc_name; 
+0

rable意思是表格,我將你的技術應用到我的程序中,它工作正常!非常感謝你。它不僅工作,但我現在理解動態SQL更好一點。再次感謝你。 – user1375026