0

これが私がローカル変数を削除する方法です:

   team_counter number (38) := 0;
   username varchar2(50) := '';

これは、select intoステートメントを使用した後、それらの値を使用/表示しようとしている方法です。

    dbms_output.put_line(team_counter||'.'||username);
    if  team_counter< 30 AND username  <>'' then
    begin
        dbms_output.put_line('yuhj');
    end;
    end if;

2番目の出力は印刷されていません!最初の出力は、私が期待していた「1.tuser」として出力されています。

4

1 に答える 1

1

これは、不等式演算子を使用して文字列を長さ0の文字列と比較しようとしているためです。

Oracleは、長さ0の文字列はNULLと同等であると想定し、NULL固有の条件を使用しない比較を評価しません。引用するには

Oracle Databaseは現在、長さがゼロの文字値をnullとして扱います。ただし、これは将来のリリースでは引き続き当てはまらない可能性があるため、空の文字列をnullと同じように扱わないことをお勧めします。

簡単に言えば、これはIFステートメントが次のようになることを意味します。

if team_counter < 30 and username is not null then
   ...

追記として、begin ... end周りの必要はありませんdbms_output.put_line。この呼び出しに明示的に関連する例外をキャッチしたり、追加の変数を宣言したりすることはないため、実際には必要ありません。

于 2012-12-08T08:45:41.220 に答える