2011-04-14 68 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值。