如何在Oracle PL / SQL where子句中使用变量

时间:2011-04-14 16:46:45

标签: oracle variables plsql

我似乎无法在Oracle PL / SQL where子句中使用变量。我来自Microsoft SQL Server背景,很简单。例如,执行类似以下操作所需的所有步骤是什么?

declare @var int set @var = 1

select * from SomeTable where SomeField = @var

这似乎不应该在PL / SQL中很难,但显然它是。 : - /我听说我需要在PL / SQL中使用游标等吗?

非常感谢任何帮助。感谢。

4 个答案:

答案 0 :(得分:10)

您想对SELECT返回的数据做什么?如果您只想查看它,根本不需要PL / SQL,只需在SQL Plus中执行此操作:

variable var number
exec :var := 1

select * from SomeTable where SomeField = :var;

或者在像SQL Developer或Toad这样的工具中,只需执行以下操作:

select * from SomeTable where SomeField = :var;

,它将提示您输入:var。

的值

答案 1 :(得分:5)

以下代码声明了要在var子句中使用的变量WHERE,并且将结果放入变量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

答案 2 :(得分: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。上面使用了一个关联数组,但也有嵌套的表和varrays。再次,请参阅链接。

希望有所帮助。

答案 3 :(得分:1)

我像这样使用它

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

当你运行它时,pl / sql将提示输入MENU_ID值。