問題は、charを使用するかどうかにあります またはvarchar2 クエリの比較セマンティクス。ハードコードされた文字列リテラルまたはchar(10)がある場合 変数の場合、Oracleはcharを使用します 末尾の空白を無視する比較セマンティクス。 varchar2(10)がある場合 変数の場合、Oracleはvarchar2を使用します 末尾の空白を含む比較セマンティクス。したがって、
select aa
into v_temp
from abc
where aa in (v_aa);
v_aaの場合、行を返します char(10)として定義されています (または文字列リテラルに置き換えられた場合)ただし、varchar(10)として定義されている場合はそうではありません 。
これは、ほとんどの人がcharを避ける(多くの)理由の1つです。 データ型は完全に。個人的には、たまにcharを気にしません。 真に固定幅のデータの場合(つまり、char(1) フラグとchar(2)の場合 状態コードの場合)charを使用するメリットはありませんが varchar2以上 それらのシナリオでは。ただし、固定幅以外の場合は、charを使用します。 意味がありません。 Oracleに必要以上のスペースを消費させ、2セットの文字列比較セマンティクスを処理するための作業を自分で作成しているだけです(他の問題もあります)。