在Oracle中定义局部变量的最简单方法是什么?

时间:2012-07-02 17:53:35

标签: oracle variables plsql

在SQL Server中,我可以像这样定义局部变量。

declare @id number := 1000

select * from tbl_A where id = @id;
select * from tbl_B where id = @id;

非常方便。 我试图在PL/SQL做同样的事情,但它没有用。

DECLARE id number;
select 1000 into id from dual;

你知道如何做类似的事吗?最简单的方法是我的目标。

5 个答案:

答案 0 :(得分:9)

如果要在PL / SQL中定义局部变量,则需要一个完整的PL / SQL块

DECLARE
  id NUMBER;
BEGIN
  SELECT 1000
    INTO id
    FROM dual;
END;

或只是

DECLARE
  id NUMBER := 1000;
BEGIN
  <<do something that uses the local variable>>
END;

如果要在SQL * Plus中声明变量

SQL> variable id number
SQL> begin
       select 1000 into :id from dual;
     end;
     /

SQL> print id

        ID
----------
      1000

SQL> SELECT * FROM tbl_a WHERE id = :id

答案 1 :(得分:1)

DECLARE Block的替代方法是使用WITH子句:

aj

它更具可移植性,因为许多供应商都支持WITH子句,您可以从参数到动态值进行无缝更改。例如:

WITH my_params AS (
    SELECT 123 AS min_id FROM DUAL
) 
SELECT * 
FROM some_table 
WHERE id > (SELECT min_id FROM my_params)

答案 2 :(得分:0)

我在Oracle上试过这个并且它有效:

> DEF x = TOTO
> SELECT '&x' FROM dual;

结果将是:TOTO

答案 3 :(得分:0)

在PL / SQL中声明变量的一般语法是

  

var_nm数据类型[NOT NULL:= var_value];

     
      
  • var_nn是变量的名称。
  •   
  • datatype是一种有效的PL / SQL数据类型。
  •   
  • NOT NULL是变量的可选规范,该变量不能赋值为null。
  •   
  • var_value或DEFAULT值也是一个可选规范,您可以在其中初始化具有某个特定值的变量。
  •   
  • 每个变量声明都是一个单独的声明,必须以分号结束。
  •   

我们可以通过以下两种方式之一为变量赋值 -

  1. 直接指派(例如var_nm:= var_value;
  2. 使用select from(例如SELECT col_nm INTO var_nm FROM tbl_nm [WHERE clause];
  3. 在你的情况下,Justin Cave已经提到它可以是

    DECLARE 
     id number; 
    BEGIN
     SELECT 1000 into id from dual;
     dbms_output.put_line('id : '|| id ); 
    END; 
    /
    

    OR

    DECLARE 
     id number := 1000; 
    BEGIN
     dbms_output.put_line('id : '|| id ); 
    END; 
    /
    

    注意:'/'即END关键字后面的反斜杠表示执行上述PL / SQL块。

答案 4 :(得分:0)

(只是偶然发现了这个线程。)从SQL * Plus 12.2开始,您可以同时声明和分配一个值:

SQL> var id number = 1000

SQL>从tbl_A中选择*,其中id =:id;

Oracle称其为输入绑定。

如果必须在PL / SQL中执行此操作,答案是由其他人给出的。