A MLEの型変換

JavaScriptと、PL/SQL、SQLおよびJSONのデータ型の間のサポートされている変換。

JavaScriptのターゲット型には、ネイティブのJavaScript型とSQLラッパー型の両方が含まれます。サポートされるSQL型は、デフォルトで類似のJavaScript型に変換されます(このような自然に対応するものが存在する場合)。変換が試行されたが対応するJavaScript型がなかった場合、ネイティブJavaScript型への変換はサポートされず、かわりに値は対応するSQLラッパー型にデフォルトで変換されます。

ノート:

MLEでは、カスタマイズされたデータベース文字表現からJavaScript (UTF-16)の組込み文字列表現への変換の間に発生する可能性がある情報損失を防ぐ機能は提供されません。

関連項目:

日付変換

JavaScriptのDateは、時点(つまり、一瞬の時間)を表します。変換は、時点型Dateと、タイムゾーン情報がないPL/SQL型DATEおよびTIMESTAMPの間で可能です。JavaScript側の時点と、相手側のDATEおよびTIMESTAMPの間の変換は、次のように処理されます:

  • DateTIMESTAMPまたはDATEに変換すると、時点は現行セッションのタイムゾーンのタイムゾーン対応データ時間値に変換されます。この値のローカルのデータ時間部分は、ターゲットのDATEまたはTIMESTAMP値に格納されます。

  • TIMESTAMPまたはDATEをタイムゾーン対応のDateに変換するために、ソースの日時値がセッションのタイムゾーンで解釈され、セッションのタイムゾーンに従って時点に変換されます。

表A-1 SQL型およびPL/SQL型からJavaScript型へのサポートされているマッピング

SQL型 JavaScript型(太字フォントはデフォルトを示します)

NUMBER

number

OracleNumber

BINARY_FLOAT

number

BINARY_DOUBLE

number

BINARY_INTEGER脚注1

number

BOOLEAN

boolean

VARCHAR2

string

NVARCHAR2

string

CHAR

string

NCHAR

string

CLOB

OracleCLOB

string

NCLOB

OracleCLOB

string

BLOB

OracleBLOB

Uint8Array (TypedArray)

RAW

Uint8Array (TypedArray)

DATE

Date

OracleDate

TIMESTAMP

Date

OracleTimestamp

TIMESTAMPWITHTIMEZONE

Date

OracleTimestampTZ

TIMESTAMPWITHLOCALTIMEZONE

Date

OracleTimestampTZ

INTERVALYEARTOMONTH

OracleIntervalYearToMonth

INTERVALDAYTOSECOND

OracleIntervalDayToSecond

NULL脚注2

null

JSON

すべて(オブジェクト、配列、null)脚注3

脚注1 BINARY_INTEGERはPL/SQL型であり、SQLではサポートされていません。MLEでは、PL/SQLインタフェース上のBINARY_INTEGERのみをサポートします。

脚注2 厳密には型ではありませんが、MLEではSQLのNULL値をJavaScriptのnull値(またはその逆)に変換します。これは、データベースに渡される値が存在しないことを、JavaScriptでデータベースに示すためです(たとえば、ファンクションの戻り値またはSQL文のINバインド)。

脚注3 詳細は、表A-3を参照してください

表A-2 JavaScript型からSQL型へのサポートされているマッピング

JavaScript型 SQL型

number

boolean

OracleNumber

NUMBER

number

BINARY_FLOAT

number

BINARY_DOUBLE

number

boolean

BINARY_INTEGER

number

OracleNumber

boolean

BOOLEAN

string

VARCHAR2

string

CHAR

string

NCHAR

string

NVARCHAR2

string

OracleCLOB

CLOB

string

OracleCLOB

NCLOB

string

UROWID

Uint8Array

OracleBlob

BLOB

UintArray

RAW

Date

OracleDate

DATE

Date

OracleTimestamp

TIMESTAMP

Date

OracleTimestampTZ

TIMESTAMP WITH (LOCAL) TIME ZONE

OracleIntervalYearToMonth

INTERVALYEARTOMONTH

OracleIntervalDayToSecond

INTERVALDAYTOSECOND

null

NULL (サポートされているすべてのSQL型)

number

string

boolean

null

undefined

Date

Uint8Array

OracleNumber

OracleDate

OracleTimestamp

OracleTimestampTZ

OracleIntervalYearToMonth

OracleIntervalDayToSecond

オブジェクト脚注4

JSON脚注5

脚注4 前述のクラスのいずれとも一致しないJavaScriptオブジェクトおよび配列

脚注5 詳細は、表A-4を参照してください

JSONマッピングのサポート

SQLのJSON型の値は、JavaScript値と相互に変換できます。SQLのJSON型とJavaScript値の間の型マッピングは、node-oracledbドライバで使用される型マッピングと連携しています。

ノート:

node-oracledbおよびJSONデータ型の詳細は、node-oracledbのドキュメントを参照してください。

SQLのJSON型の値は、次のようにJavaScript値に変換されます:

  • JSON値がオブジェクトの場合、入力オブジェクトのすべてのフィールドを変換することで同等のJavaScriptオブジェクトに変換されます。

  • JSON値が配列の場合、入力配列のすべての要素を変換することで同等のJavaScript配列に変換されます。

  • JSON値がスカラー値の場合、表A-3の型マッピングに従って同等の値に変換されます。

表A-3 JSON属性の型と値からJavaScriptの型と値へのマッピング

JSON属性の型または値 JavaScriptの型または値
null null
false false
true true
NUMBER Number
VARCHAR2 String
RAW Uint8Array
CLOB String
BLOB UintArray
DATE Date
TIMESTAMP Date
INVERVAL YEAR TO MONTH OracleIntervalYearToMonth
INTERVALDAYTOSECOND OracleIntervalDayToSecond
BINARY_DOUBLE Number
BINARY_FLOAT Number
配列(複数) 配列(単一)
オブジェクト(複数) 単一のプレーンなJavaScriptオブジェクト

JavaScript型の値は、次のようにSQLのJSON型に変換されます:

  • JavaScript値が表A-4の最初の列のスカラー型のいずれかと一致する場合は、対応する型のJSON値に変換されます。

  • JavaScript値が配列の場合、配列のすべての要素を変換することで、JSON配列に変換されます。Uint8Array値は配列ではなくスカラーとして扱われるため、Uint8Array値はJSON配列ではなくRAW型に変換されます。

  • JavaScript値がオブジェクトであり、配列ではなく、表A-4にリストされているJavaScript型/クラスのいずれにも一致していない場合は、JSONオブジェクトに変換されます。オブジェクトの各フィールドは、適切なマッピングに従って変換されます。

表A-4 JavaScriptの型と値からJSONの属性と値へのマッピング

JavaScriptの型または値 JSON属性の型または値
null null
undefined null
string VARCHAR2
true true
false false
Uint8Array RAW
Number NUMBER
Date DATE
OracleNumber NUMBER
OracleDate DATE
OracleTimestamp TIMESTAMP
OracleTimestampTZ TIMESTAMPWITHTIMEZONE
OracleIntervalYearToMonth INVERVAL YEAR TO MONTH
OracleIntervalDayToSecond INTERVALDAYTOSECOND
配列(単一) 配列(単一)
オブジェクト(単一) オブジェクト(単一)