プライマリ・コンテンツに移動
Oracle® Database Oracleプリコンパイラのためのプログラマーズ・ガイド
12c リリース1 (12.1)
B71398-03
目次へ移動
目次
索引へ移動
索引

前
次

データ型変換

プリコンパイル時に、宣言部の各ホスト変数に外部データ型が割り当てられます。たとえば、プリコンパイラは整数ホスト変数にINTEGER外部データ型を割り当てます。SQL文で使用するすべてのホスト変数のデータ型コードは、実行時にOracleに渡されます。Oracleは、コードを使用して内部データ型と外部データ型の間で変換します。

Oracleでは、選択した列(または擬似列)値を出力ホスト変数に割り当てる前に、必要に応じて、その列の内部データ型をホスト変数のデータ型に変換します。同様に、入力ホスト変数の値をデータベース列に割り当てたり、比較したりする前には、必要に応じて、ホスト変数の外部データ型を列の内部データ型に変換します。

ただし、ホスト変数のデータ型は、データベース列のデータ型との互換性が必要です。必ず、変換可能な値を指定してください。たとえば、文字列値YESTERDAYをDATE列値に変換しようとすると、エラーが発生します。

内部データ型と外部データ型との変換は、通常のデータ変換規則に従って行われます。たとえば、CHAR値の1234を2バイトの整数に変換できます。しかし、CHAR値の65543(大きすぎる数)や10F(10進数ではない数)を2バイトの整数に変換することはできません。同様に、アルファベット文字を含む文字列値はNUMBER値に変換できません。

数値の変換は、Oracle初期化ファイルのグローバリゼーション・サポート・パラメータで指定された規則に従って行われます。たとえば、ピリオド(.)ではなくカンマ(,)を小数点として認識するようにシステムが構成されている場合があります。グローバリゼーション・サポートの詳細は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。

表3-6は、サポートされている内部データ型と外部データ型間の変換を示しています。

注意:

凡例:

  • 入力時には、ホスト文字列をOracleのBBBBBBBB.RRRR.FFFF形式にする必要があります。

    I = 入力のみ。出力時には、列値が同じ形式で戻されます。

    O = 出力のみ

  • 入力時には、ホスト文字列をデフォルトのDATE文字形式にする必要があります。

    I/O = 入力または出力。出力時には、列値が同じ形式で戻されます。

  • 入力時には、ホスト文字列を16進数の形式にする必要があります。出力時には、列値は同じ形式で戻されます。

  • 出力時には、列値は有効な数値を表している必要があります。

  • 入力時には、長さが2000以下であることが必要です。

  • 入力時には、列値は16進数の形式で格納されます。出力時、列値は16進フォーマットであることが必要です。

  • 入力時には、ホスト文字列をテキスト形式の有効なオペレーティング・システム・ラベルにする必要があります。出力時には、列値は同じ形式で戻されます。

  • 入力時には、ホスト文字列をRAW形式の有効なオペレーティング・システム・ラベルにする必要があります。出力時には、列値は同じ形式で戻されます。

表3-6 内部データ型と外部データ型間の変換

外部 内部 — CHAR 内部 — DATE 内部 — LONG 内部 — LONG RAW 内部 — MLSLABEL 内部 — NUMBER 内部 — RAW 内部 — ROWID 内部 — VARCHAR2

CHAR

I/O

I/O

I/O

I

I/O

I/O

I/O

I/O

I/O

CHARF

I/O

I/O

I/O

I

I/O

I/O

I/O

I/O

I/O

CHARZ

I/O

I/O

I/O

I

I/O

I/O

I/O

I/O

I/O

DATE

I/O

I/O

I

I/O

DECIMAL

I/O

I

I/O

I/O

DISPLAY

I/O

I

I/O

I/O

FLOAT

I/O

I

I/O

I/O

INTEGER

I/O

I

I/O

I/O

LONG

I/O

I/O

I/O

I

I/O

I/O

I/O

I/O

I/O

LONG RAW

O

I

I/O

I/O

O

LONG VARCHAR

I/O

I/O

I/O

I

I/O

I/O

I/O

I/O

I/O

LONG VARRAW

I/O

I

I/O

I/O

I/O

MLSLABEL

I/O

I/O

I/O

I/O

NUMBER

I/O

I

I/O

I/O

RAW

I/O

I

I/O

I/O

I/O

ROWID

I

I

I/O

I

STRING

I/O

I/O

I/O

I

I/O

I/O

I/O

I/O

I/O

UNSIGNED

I/O

I

I/O

I/O

VARCHAR

I/O

I/O

I/O

I

I/O

I/O

I/O

I/O

I/O

VARCHAR2

I/O

I/O

I/O

I

I/O

I/O

I/O

I/O

I/O

VARNUM

I/O

I

I/O

I/O

VARRAW

I/O

I

I/O

I/O

I/O

DATE値

ホスト変数値にDATE列値を選択すると、Oracleでは内部バイナリ値を外部文字値に変換する必要があります。そのため、暗黙的にSQLファンクションTO_CHARがコールされ、これによって文字列がデフォルトの日付書式で戻されます。デフォルトはOracleの初期化パラメータ、グローバリゼーション・サポートのDATE_FORMATによって設定されます。時刻やユリウス日などの他の情報を取得するには、書式マスクを指定してTO_CHARを明示的にコールする必要があります。

文字ホスト変数をDATE列に挿入するときにも変換が必要です。Oracleでは暗黙的にSQLファンクションTO_DATEがコールされ、デフォルトの日付書式が予想されます。他の書式で日付を挿入するには、書式マスクを指定してTO_DATEを明示的にコールする必要があります。

RAWおよびLONG RAWの値

文字ホスト変数にRAW列値またはLONG RAW列値を選択すると、Oracleでは内部バイナリ値を外部文字値に変換する必要があります。この場合、OracleからはRAWまたはLONG RAWデータのそれぞれのバイナリ・バイトが文字のペアとして戻されます。個々の文字は、ニブル(1/2バイト)の等価の16進値を表します。たとえば、バイナリ・バイト11111111は文字のペア「FF」として戻されます。SQLファンクションRAWTOHEXは、同じ変換を実行します。

文字ホスト値をRAW列またはLONG RAW列に挿入するときにも変換が必要です。ホスト変数内の文字のペアはそれぞれ、バイナリ・バイトの等価の16進値を表している必要があります。文字がニブルの16進数等価値でなければ、次のエラー・メッセージが出ます。

ORA-01465: invalid hex number