は、ワークス: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キーワードを使用して試すことができます
を試すことができます。この動作は、多くのレポート(データ辞書のレポートなど)で「すぐに」表示されることがわかります。 –
2番目のコードブロックについて話していますか? 3番目に、私はDEFINEセクションを持っています - もしそれがバインド変数を定義する正しい方法なら? – user3341592
私は、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 –