2009-06-01 19 views
0

私はSQL Serverで完全に動作し、簡単なSQL文を持っている:ルーキーOracleの変数質問

DECLARE @ID VARCHAR(10) 
SET @ID = '12345' 

SELECT * 
FROM theTable 
WHERE ID = @ID 

誰かがどのようにOracleの中で、この非常に基本的なことを行う方法を教えていただけますか?

+0

ありがとうございました。私は彼が私のために働くことができる最初のものだったので、私はロプスタの答えを選んだ。個人的な人はいませんが、Oracleではいくつかのことをするのは難しい – wcm

+0

Oracleはそれを覚えておいてください。それは価値があります。それを習得するにあたっては多くのパワーがあります:) –

答えて

1

スクリプトの先頭に変数を設定するのが目的なら、おそらくこれがあなたの解決策ですか?

with IDS as (
    select 1234 from dual 
    union all 
    select 1235 from dual 
) 

select * from TABLE where TABLE.ID in (select * from IDS) 
+0

ありがとうたくさんのropstah!私はOracleをもっと知っていれば他の答えが私のために働いていたと思うが、これが最初に結果を返すことができる。 – wcm

0

残念ながら、簡単な方法はありません。

ブロック内で宣言する必要があります(これはストアドプロシージャである必要がありますが、少なくともブロック内にある必要があります)。しかし、それは問題のほんの一部です。一度ブロックに入ると、結果はコンソールウィンドウに長く流出することはありません。そのため、カーソルを使用して配列に行情報をコピーし、DMBS_OUTPUTを使用して値を出力する配列をステップ実行する必要があります。

簡単にMSSQLに戻すことができます。

(注:Mark Harrison)この回答は正しくありません。コードのoracleバージョンのその他の回答を参照してください。

+0

YIKES! MSSQLで私の目を閉じて何かできることを誰かに尋ねるたびに、私はこの種のものにぶつかります。あなたが正しいです!私を追いやるだけで十分です。 – wcm

2

あなたは、SQL * Plusのインタフェース(コマンドラインからSQLPLUS)を使用して、似たような操作を行うことができます。

variable asdf number; 
exec :asdf := 10; 
select :asdf from dual; 

SQLではよろしく K

1

* Plusは、それはほとんど同じです:

SQL> create table thetable (id) as select '' from dual union all select '12345' from dual 
    2/

Table created. 

SQL> var id varchar2(10) 
SQL> exec :id := '12345' 

PL/SQL procedure successfully completed. 

SQL> select * 
    2 from theTable 
    3 where id = :id 
    4/

ID 
----- 
12345 

1 row selected. 

またはPL/SQL:

SQL> declare 
    2 l_id varchar2(10) := '12345'; 
    3 r thetable%rowtype; 
    4 begin 
    5 select * 
    6  into r 
    7  from thetable 
    8  where id = l_id 
    9 ; 
10 dbms_output.put_line(r.id); 
11 end; 
12/
12345 

PL/SQL procedure successfully completed. 

よろしく、 ロブ。