2012-07-02 37 views
5

在SQL Server中,我可以像這樣定義局部變量。在Oracle中定義局部變量的最簡單方法是什麼?

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; 

你知道如何做類似的事嗎?最簡單的方法是我的目標。

回答

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 
0

我想這對Oracle和它的工作:

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

其結果將是:TOTO

0

一般語法PL/SQL聲明變量是

var_nm數據類型[NOT NULL:= var_value];

  • var_nn是變量的名稱。
  • 數據類型是一個有效的PL/SQL數據類型。
  • NOT NULL是在其上該變量不能分配空值的變量的可選規範。
  • var_value或缺省值也是可選的規範,在這裏可以用一些特定的值初始化的變量。
  • 每個變量聲明是一個單獨的語句,並且必須由分號結束。

我們可以通過以下兩種方式之一賦值給變量 - (如:var_nm:= var_value;

  1. 直接分配
  2. 使用select from
(如 SELECT col_nm INTO var_nm FROM tbl_nm [WHERE clause];)。

在你的情況下賈斯汀洞已經提到它可以

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塊。

0

一種替代DECLARE塊是使用WITH子句:

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

更便攜式因爲許多廠商支持WITH子句,你可以無縫從參數爲動態值變化。例如:

WITH my_params AS (
    SELECT min(id) AS min_id FROM some_id_table 
) 
SELECT * 
FROM some_table 
WHERE id > (SELECT min_id FROM my_params) 
相關問題