問題は、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セットの文字列比較セマンティクスを処理するための作業を自分で作成しているだけです(他の問題もあります)。