2012-07-02 2 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でのローカル変数を定義したい場合は、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; 

が必要* 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; 

結果は以下のようになります。PL/SQLで変数を宣言するTOTO

0

一般的な構文は

var_nmデータ型[NOT NULL:= var_value]です。

  • var_nnは変数の名前です。
  • データ型は有効なPL/SQLデータ型です。
  • NOT NULLは、この変数にNULL値を割り当てることができない変数のオプション仕様です。
  • var_valueまたはDEFAULTの値もオプションの指定で、変数を特定の値で初期化できます。
  • 各変数宣言は独立したステートメントであり、セミコロンで終了する必要があります。

我々は、次の2つのいずれかの方法で変数に値を割り当てることができる - (例: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

ブロックを宣言するための代替は、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) 
関連する問題