2016-07-18 60 views
2

は、ワークス:Oracle SQL Developerで実際に変数を取得する方法は?このように置換変数を使用して、Oracle SQL Developerで

DEFINE var_t1_id int = 2601; 
DEFINE var_t2_id int = (SELECT t2_id FROM table1 WHERE t1_id = &var_t1_id); 
DEFINE var_t3_id int = (SELECT t3_id FROM table1 WHERE t1_id = &var_t1_id); 

SELECT * 
FROM table2 
WHERE t2_id = &var_t2_id; 

SELECT * 
FROM table3 
WHERE t3_id = &var_t3_id; 

もののを、私は何か他のものに2601を変更し、クエリを再実行すると、 SQL Developerは、のために2601を使用し続け代入 !!!

variable var_t1_id number; 
variable var_t2_id number; 
variable var_t3_id number; 

exec :var_t1_id := 2601; 
exec SELECT t2_id INTO :var_t2_id FROM table1 WHERE t1_id = :var_t1_id; 
exec SELECT t3_id INTO :var_t3_id FROM table1 WHERE t1_id = :var_t1_id; 

SELECT * 
FROM table2 
WHERE t2_id = :var_t2_id; 

SELECT * 
FROM table3 
WHERE t3_id = :var_t3_id; 

と、この::私が欲しいもの...

私はこれ試していない

DEFINE var_t1_id int = 2601; 
DEFINE var_t2_id int = (SELECT t2_id FROM table1 WHERE t1_id = (SELECT &&var_t1_id from dual)); 
DEFINE var_t3_id int = (SELECT t3_id FROM table1 WHERE t1_id = (SELECT &&var_t1_id from dual)); 

SELECT * 
FROM table2 
WHERE t2_id = (SELECT &&var_t2_id FROM dual); 

SELECT * 
FROM table3 
WHERE t3_id = (SELECT &&var_t3_id FROM dual); 

をどれもが正しく動作しないん - 私が意味する、スクリプトが 私にメッセージを表示せずに実行する必要があります値のために...

どうすればこの問題を解決できますか?

私はこのすべてが非常に単純なSQL Serverに慣れています...もちろん、私はオラクルの知識を欠いています...私はここでヒントを求めています。あなたは

DECLARE 
    --all your variables 
    yout_variable_0 int := 1608; 
    your_variable_1 int; 
BEGIN 
    select [...] 
    into your_variable_1 
    from your_table 
    where your_column = your_variable_0; 
END; 

INTOキーワードを使用して試すことができます

+0

を試すことができます。この動作は、多くのレポート(データ辞書のレポートなど)で「すぐに」表示されることがわかります。 –

+0

2番目のコードブロックについて話していますか? 3番目に、私はDEFINEセクションを持っています - もしそれがバインド変数を定義する正しい方法なら? – user3341592

+0

私は、SQL Developerではどのように置換変数とバインド変数がどのように機能するかについて話していました。 Oracleの観点からは、置換変数は主にSQL * Plusスクリプト内で使用されます(十分に文書化された動作)。バインド変数については、通常はSQL Developerで無名ブロックまたはオブジェクト(パッケージなど)またはDMLで使用します。 BTW、Justin Caveは、ここで同様の質問に素敵な答えがあります。http://stackoverflow.com/questions/5653423/how-do-i-use-variables-in-oracle-sql-developer –

答えて

0

今、あなたの結果はyour_variable_1に格納されます。

あなたがSQL Developerで、あなたのバインド変数を定義しない場合は、プロンプト(置換変数と同じ動作)を受け取ります。この単純なクエリ

DECLARE 
    --all your variables 
    your_variable_0 varchar2(200) := '201605'; 
    your_variable_1 varchar2(200); 
BEGIN 
    select your_variable_0 
    into your_variable_1 
    from dual; 

    dbms_output.put_line('Output ...' || your_variable_1); 

END; 
+0

あなたのスケルトンを私の実際のユースケースに合わせました。しかし、私が何をしても(F5キーまたは緑の左矢印をクリックすると)、SQL Developerはvar_t2_idとvar_t3_idに「代入変数を入力してください」とポップアップ表示します。これらの回答は提供できません。最初の "SELECT .. INTO .. FROM"リクエストを実行しています...何が問題なのですか? – user3341592

+0

私はSQLDeveloperには自信がありませんが、すべてのコードを選択して実行してください。 –

+0

同じようにポップアップ... PS - 何を使用していますか? – user3341592

関連する問題