どのように私は、単一のステートメントで複数回発生した置換変数のために一度だけのSQL Developer / SQL +プロンプトすることができますか?
-
09-09-2019 - |
質問
私は大体このようなクエリを持っています:
select *
from A_TABLE
where A_COLUMN = '&aVariable'
union
select *
from A_TABLE
where B_COLUMN = '&aVariable';
しかし、私はそれを実行すると、SQL Developerは、それは同じ変数だにも関わらず、二回の変数のために私を促します。
は、それが2回使用されている変数のために一度だけプロンプトを表示させるための方法があります場合は、私はそれを行うのですか?
私は のないスクリプトを使用したいです、それは単一の実行クエリにする必要があります。
解決
私はこのポストを形成したので、私はそれを行う方法を考え出します:
:a_var
select *
from A_TABLE
where A_COLUMN = :a_var
union
select *
from A_TABLE
where B_COLUMN = :a_var;
SQL Developerは、あなたがそれを入力して適用する打つことができる、バインド変数の入力を要求されます。
他のヒント
select *
from A_TABLE
where A_COLUMN = '&aVariable'
union
select *
from A_TABLE
where B_COLUMN = '&&aVariable';
2回目(およびそれ以降)の変数は、二重アンパサンドを使用する方法に注目してください(&&)
私はあなたがそれを行うための別の方法を発見した知っているが、FYI基本的な答えは、あなたがアンパサンドを倍増場合(例えば、使用「&& aVariable」)、その後、あなたは置換変数に入力した値が長さのために記憶されるだろうということですあなたのセッションの。あなたが再び求められることはありませんクエリを再実行した場合なお、この場合、それは同じ値を使用して維持されます。
ですから、使用&置換あなただけのシングル&としてを使用しているときより高速な方法の代わりに、もう一度上の値を入力する必要が。 &&値を使用することにより、ロックイン変数名になります。だから、&&変数は&&変数1と異なるだろう。このようにそれを行うことによって、あなたは一度プロンプトが表示されます、あなたが入力され、その値は、その変数名に付着されます。あなたは、このようにコードを記述する場合は簡単に言えます:
SELECT *
FROM A_TABLE
WHERE A_COLUMN = '&&aVariable1'
UNION
SELECT *
FROM A_TABLE
WHERE B_COLUMN ='&&aVariable2';
あなたは、値の異なるセットを使用したい場合は、次に、あなたがこの「&& aVariable3」と「&& aVariable4」のような何かに変数名を変更する必要があります別のセットのために十分なものでなければなりません。