6

私は大まかに次のようなクエリを持っています:

 select * 
  from A_TABLE 
  where A_COLUMN = '&aVariable'
    union
 select * 
  from A_TABLE 
  where B_COLUMN = '&aVariable';

しかし、それを実行すると、SQL Developerは、同じ変数であっても、変数の入力を2回要求します。

2回使用される変数に対して1回だけプロンプトを表示する方法がある場合、どうすればよいですか?

スクリプトは使用したくありません。単一の実行可能クエリである必要があります。

4

5 に答える 5

10

この投稿を作成しているときに、その方法を理解しました。

 :a_var
 select * 
  from A_TABLE 
  where A_COLUMN = :a_var
    union
 select * 
  from A_TABLE 
  where B_COLUMN = :a_var;

次に、SQL Developerはバインド変数の入力を求めます。それを入力して、「適用」をクリックします。

于 2009-04-09T18:48:48.397 に答える
7
select * 
  from A_TABLE 
  where A_COLUMN = '&aVariable'
    union
 select * 
  from A_TABLE 
  where B_COLUMN = '&&aVariable';

2番目(およびそれ以降)の変数がダブルアンパサンド(&&)をどのように使用するかに注意してください。

于 2010-04-20T15:45:58.720 に答える
3

別の方法を見つけたと思いますが、基本的な答えは、アンパサンドを2倍にすると(たとえば、「&& aVariable」を使用)、置換変数に入力した値がセッションの長さにわたって記憶されるということです。 。この場合、クエリを再実行しても再度プロンプトが表示されることはなく、同じ値が引き続き使用されることに注意してください。

于 2009-04-09T20:41:29.097 に答える
1

したがって、&置換を使用する場合は、値を繰り返し入力する代わりに、単一の&をより高速な方法として使用しているだけです。&&を使用すると、値は変数名に固定されます。したがって、&&variableは&&variable1とは異なります。このようにすることで、一度プロンプトが表示され、入力した値がその変数名に準拠します。あなたがこのようにあなたのコードを書くならば、簡単に言えば:

SELECT *
FROM A_TABLE
WHERE A_COLUMN = '&&aVariable1'
UNION
SELECT *
FROM A_TABLE
WHERE B_COLUMN ='&&aVariable2';

次に、別の値のセットを使用する場合は、変数名を次のように変更する必要があります。「&&aVariable3」および「&&aVariable4」は別のセットには十分です。

于 2017-12-17T20:24:09.837 に答える
0
ACCEPT variableToPrompt PROMPT "Enter variable" DEFAULT "test";

SELECT
    *
FROM    
    TABLE
WHERE
    COLUMN = '&variableToPrompt'

'&variableToPrompt'の'は、変数が文字列の場合にのみ必要であることに注意してください。デフォルト値はオプションです。

于 2020-01-10T17:08:56.527 に答える