2016-04-18 28 views
1

私にはクエリが必要です。列に存在しないリストからすべての番号を選択する必要があります。現在、私はこれがうまく動作しています。このクエリは、18332000の間のすべての数値がATTRテーブルに存在しないことを返します。Oracle SQL Developerで一時変数を1回使用する

SELECT LEVEL + 1833 
FROM DUAL 
CONNECT BY LEVEL <= (2000 - 1833) 
MINUS 
SELECT ID_TX 
FROM ATTR 
WHERE ID_TX BETWEEN 1834 AND 2000; 

私がやりたいことは、できるだけユーザーフレンドリーなものにすることです。そのためには、とLIST_LENGTHという2つの変数を入力できます。これで私のクエリは次のようになります。まず

SELECT LEVEL + &STARTING_ID 
FROM DUAL 
CONNECT BY LEVEL <= &LIST_LENGTH 
MINUS 
SELECT ID_TX 
FROM ATTR 
WHERE ID_TX BETWEEN &STARTING_ID AND &STARTING_ID + &LIST_LENGTH; 

、私は&&を使用していたが、その後、私は一度だけ、このクエリを使用することができます。 UNDEFINEをコードブロックに配置できず、とにかく変数を消去していませんでした。今では私の問題は、それぞれ&変数が異なると考えているため、ユーザーが2つではなく5つの変数を入力するようになっていることです。

私はまだ、変数を入力します)。クエリを実行している人は、183367という2つの値を入力するだけですか?

+0

質問をすることなく質問をする方法がわからないので、質問= Pをします。しかし、疑問符なし!あなたはこれをどのツールから実行していますか? = P –

答えて

1

どのように使用すると:プロンプトとして?

SELECT LEVEL + :STARTING_ID 
FROM DUAL 
CONNECT BY LEVEL <= :LIST_LENGTH 
MINUS 
SELECT ID_TX 
FROM ATTR 
WHERE ID_TX BETWEEN :STARTING_ID AND :STARTING_ID + :LIST_LENGTH; 

これはバインド変数の概念を採用しています。したがって、ユーザは必要な値を入力して処理を進めることができます。

enter image description here

enter image description here

+0

ありがとう、バットマン。これは私が必要とするものです。私は変数をクエリ自体に入れる方法を探していましたが、 "入力バインド"ポップアップは変数を保存していますが、変更可能なので、必要なだけのユーザーフレンドリーです。 –

0

'&'の代わりに '& &'を使用してください。

未定義の変数で1つのアンパサンドプレフィックスを使用すると、プロンプトで入力した値は保存されません。一度代入すると変数は破棄され、未定義のままです。変数が同じステートメント内であっても2回参照されている場合は、プロンプトが2回表示されます。

'& &'を使用すると、値が保存されるため、1つしか表示されません。

2

ファッジのビットがありますが置換変数のためのプロンプトをしたい場合、あなたは、バインド変数を使用しますが、ちょうどこのように置換変数を使用してそれらを移入することができます

F5を使用し、を使用してステートメントとして使用しないでスクリプトとして実行します。Ctrl + Enter

VARIABLE list_length NUMBER; 
VARIABLE start_value NUMBER; 

BEGIN 
    :list_length := &ll; 
    :start_value := &sv; 
END; 
/

SELECT LEVEL + :start_value 
FROM DUAL 
CONNECT BY LEVEL <= :list_length 
MINUS 
SELECT ID_TX 
FROM ATTR 
WHERE ID_TX BETWEEN :start_value + 1 AND :start_value + :list_length; 

それ以外の場合は、バインド変数(つまり、スクリプトの最下部にあるクエリ)。

関連する問題