プリコンパイル時には、各ホスト変数にデフォルトの外部データ型が割り当てられます。たとえば、プリコンパイラでは、short int型およびint型のホスト変数にINTEGER外部データ型が割り当てられます。
SQL文で使用するすべてのホスト変数のデータ型コードは、実行時にOracleに渡されます。Oracleは、コードを使用して内部データ型と外部データ型の間で変換します。
選択された列(または疑似列)の値を出力ホスト変数に割り当てる前に、Oracleではソース列の内部データ型をホスト変数のデータ型に変換する必要があります。同様に、入力ホスト変数の値の、列への割当てまたは比較を行う場合は、その前に必ずホスト変数の外部データ型をターゲット列の内部データ型に変換します。
内部データ型と外部データ型との変換は、通常のデータ変換規則に従って行われます。たとえば、CHAR値「1234」をC言語のshort値に変換できます。CHAR値「65543」(大きすぎる値)または「10F」(10進数でない値)は、C言語のshort値に変換できません。同様に、アルファベット文字が含まれるchar[n]
値はNUMBER値に変換できません。