2011-04-14 51 views
5

我似乎無法讓變量在Oracle PL/SQL where子句中工作。我來自Microsoft SQL Server背景,在那裏很容易。例如,執行類似於以下內容的所有步驟需要什麼?如何在Oracle PL/SQL中使用變量where子句

declare @var int set @var = 1 

select * from SomeTable where SomeField = @var 

這似乎並不像PL/SQL中應該很難,但顯然是這樣。 : - /我聽說我需要在PL/SQL中使用遊標等?

任何幫助將不勝感激。謝謝。

回答

9

你想用SELECT返回的數據做什麼?如果你只是想看到它,你不需要PL/SQL可言,只是這樣做在SQL加:

variable var number 
exec :var := 1 

select * from SomeTable where SomeField = :var; 

或者像SQL Developer或蟾蜍的工具,只是這樣做:

select * from SomeTable where SomeField = :var; 

它會提示您輸入:var的值。

+0

這是OP所要求的,至少,它看起來非常類似於SQLServer示例中顯示的內容。 – 2011-04-14 17:39:56

+3

謝謝!這看起來朝着這個方向邁出了一大步。是的,我正在使用Oracle SQL Developer。任何將代碼嵌入到變量中的方法,並讓它出現在彈出提示符中? – MattB 2011-04-14 17:59:38

5

以下代碼聲明要在WHERE子句中使用的變量var,並將結果放入變量result,然後在PL/SQL塊內執行該變量。

DECLARE 
    var  INT := 1; 
    result INT; 
BEGIN 
    SELECT 123 
    INTO result 
    FROM DUAL 
    WHERE var = 1; 

    DBMS_OUTPUT.put_line (var); 
    DBMS_OUTPUT.put_line (result); 
END; 

DBMS_OUTPUT.PUT_LINE電話使之產生這個DBMS輸出:

1 
123 
+0

+1只需要澄清一下,該語法適用於必須只返回一行的SELECT。 – 2011-04-14 17:04:36

+0

謝謝。怎麼樣多行? – MattB 2011-04-14 17:05:28

2
declare 

    type t_rec is record 
    (
    col1 number, 
    col2 myTable.col2%type 
); 
    v_rec t_rec; 

    type t_tab is table of v_rec%type index by binary_integer; 
    v_tab t_tab; 

begin 

    select col1, col2 
    bulk collect into v_tab 
    from myTable 
    where col3 = 'BLAH'; 

    -- do something great with v_tab... 

end; 

也知道,如果你試圖選擇進入(或散裝收集到)一個變量,並沒有行返回,你會得到一個no_data_found異常,所以你可能想要處理這種情況。

有關pl/sql集合,請參閱more here。上面使用關聯數組,但也有嵌套表和變量。再次看到鏈接。

希望有所幫助。

0

我使用這樣的

select * from sec_mainmenu where serno = '&MENU_ID'; 

當你運行它,PL/SQL會提示MENU_ID值。

相關問題