4

Oracle プロシージャで「where 0=0」のようなステートメントを使用する際に少し混乱していますか? 誰かがそれを明確にしてもらえますか? 動的選択のために行っているのに、実際の条件をクエリに追加しているのに、なぜこのステートメントを追加するのでしょうか? この where 条件は結果セットに違いをもたらしますか?..

列に文字列の単語が含まれているすべての行を選択するには どうすればよいですか?

を使用する理由がよくわかりませんでしたwhere 0=0。そのような条件を使用する適切な理由を教えてください。

4

5 に答える 5

3

動的 SQL を使用する場合、満たされる特定の条件によっては、追加の句を追加する必要がある場合があります。1=1 句はクエリでは意味がありません (常に満たされること以外)。その唯一の用途は、最初にクエリを生成するために使用されるコードの複雑さを軽減することです。

たとえば、この擬似コード

DECLARE
v_text VARCHAR2(2000) := 'SELECT * FROM table WHERE 1=1 ';
BEGIN

    IF condition_a = met THEN
    v_text := v_text ||' AND column_1 = ''A'' ';
    END IF;

    IF condition_b = also_met THEN
    v_text := v_text ||' AND column_2 = ''B'' ';
    END IF;

execute_immediate(v_text);

END;

以下の疑似コードよりも単純であり、句が追加されるにつれて、より複雑になるだけです。

DECLARE
v_text VARCHAR2(2000) := 'SELECT * FROM table  ';
BEGIN

    IF condition_a = met THEN
    v_text := v_text ||' WHERE column_1 = ''A'' ';
    END IF;

    IF condition_b = also_met AND 
       condition_a != met THEN
    v_text := v_text ||' WHERE column_2 = ''B'' ';
    ELSIF condition_b = also_met AND 
       condition_a = met THEN
    v_text := v_text ||' AND column_2 = ''B'' ';
    END IF;

execute_immediate(v_text);

END;
于 2013-08-19T08:03:57.607 に答える
1

これは通常、SQL クエリの文字列を連結する必要がある場合に使用されるため、最初の部分を次のように記述します。

SELECT * FROM table WHERE 1=1 

そして、いくつかの条件が真の場合は、さらに句を追加できます。それ以外の場合は、クエリをそのままにして、エラーなしで実行されます...

通常、実行時にクエリの文字列に直接追加する句を追加するために使用されます。

于 2013-08-19T07:44:06.770 に答える
0

これは常に true 条件です。つまり、'0' は常に '0' と等しくなります。つまり、条件は常に実行されます。

クエリのデバッグを容易にするためにこれを使用する人もいます。彼らは、チェック目的で不要な条件をコメントできるように、WHERE 句と AND 句を使用した残りの条件にそれを入れます。

例えば

SELECT * from 
TABLE
WHERE 1=1
AND condition1
AND condition 2
.....

.

于 2013-08-19T08:12:14.293 に答える