A MLEの型変換
JavaScriptと、PL/SQL、SQLおよびJSONのデータ型の間のサポートされている変換。
JavaScriptのターゲット型には、ネイティブのJavaScript型とSQLラッパー型の両方が含まれます。サポートされるSQL型は、デフォルトで類似のJavaScript型に変換されます(このような自然に対応するものが存在する場合)。変換が試行されたが対応するJavaScript型がなかった場合、ネイティブJavaScript型への変換はサポートされず、かわりに値は対応するSQLラッパー型にデフォルトで変換されます。
ノート:
MLEでは、カスタマイズされたデータベース文字表現からJavaScript (UTF-16)の組込み文字列表現への変換の間に発生する可能性がある情報損失を防ぐ機能は提供されません。関連項目:
-
PL/SQLとJavaScript間で値を交換する際に
mle-js-bindings
を使用してデフォルト・マッピングを変更する方法の詳細は、サーバー側JavaScript APIのドキュメントを参照してください mle-js-plsqltypes
を使用してOracleNumber
などのSQLラッパー型を作成する方法の詳細は、サーバー側JavaScript APIのドキュメントを参照してくださいSELECT
文から列値をフェッチする際にmle-js-oracledb
を使用してデフォルトの変換(表A-1を参照)をオーバーライドする方法の詳細は、サーバー側JavaScript APIのドキュメントを参照してください
日付変換
JavaScriptのDate
は、時点(つまり、一瞬の時間)を表します。変換は、時点型Date
と、タイムゾーン情報がないPL/SQL型DATE
およびTIMESTAMP
の間で可能です。JavaScript側の時点と、相手側のDATE
およびTIMESTAMP
の間の変換は、次のように処理されます:
-
Date
をTIMESTAMP
またはDATE
に変換すると、時点は現行セッションのタイムゾーンのタイムゾーン対応データ時間値に変換されます。この値のローカルのデータ時間部分は、ターゲットのDATE
またはTIMESTAMP
値に格納されます。 -
TIMESTAMP
またはDATE
をタイムゾーン対応のDate
に変換するために、ソースの日時値がセッションのタイムゾーンで解釈され、セッションのタイムゾーンに従って時点に変換されます。
表A-1 SQL型およびPL/SQL型からJavaScript型へのサポートされているマッピング
SQL型 | JavaScript型(太字フォントはデフォルトを示します) |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
すべて(オブジェクト、配列、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型 |
---|---|
|
|
|
|
|
|
|
BINARY_INTEGER |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UintArray |
|
|
|
|
|
|
|
|
|
|
|
|
|
オブジェクト脚注4 |
JSON脚注5 |
脚注4 前述のクラスのいずれとも一致しないJavaScriptオブジェクトおよび配列
脚注5 詳細は、表A-4を参照してください
JSONマッピングのサポート
SQLのJSON
型の値は、JavaScript値と相互に変換できます。SQLのJSON
型とJavaScript値の間の型マッピングは、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 |
配列(単一) | 配列(単一) |
オブジェクト(単一) | オブジェクト(単一) |