原文はこちら。
https://blogs.oracle.com/opal/node-oracledb-2013-development-is-now-on-github
Node-oracledb 2.0.13-DevelopmentがGitHubから利用いただけるようになりました。Node-oracledbはNode.jsでOracle Databaseを使うためのインターフェースです。
このリリースにおけるその他の変更は以下の通りです。
https://blogs.oracle.com/opal/node-oracledb-2013-development-is-now-on-github
Node-oracledb 2.0.13-DevelopmentがGitHubから利用いただけるようになりました。Node-oracledbはNode.jsでOracle Databaseを使うためのインターフェースです。
Top features:
- Version 2はODPI-C抽象化レイヤーをベースにしています。
ODPI Oracle Database Programming Interface for Drivers and Applications
https://github.com/oracle/odpi - サポートされるデータ型が増えました。
完全な変更履歴(Changelog)は以下をご覧ください。
是非テストいただき、2.0 Development リリースサイクルの間に、出来るだけ早期に問題をレポートいただきたく思います。Change Lognode-oracledb 2.0.13-Developmentのドキュメントは以下からどうぞ。
https://github.com/oracle/node-oracledb/blob/dev-2.0/CHANGELOG.md
node-oracledb 2.0 Documentation for the Oracle Database Node.js Add-on
https://github.com/oracle/node-oracledb/blob/dev-2.0/doc/api.md
node-oracledb Issue trackerこれはDevelopment Releaseなので、まだ粗い部分があることは承知しています。GitHubのIssueを使ってトラッキングを開始します。
https://github.com/oracle/node-oracledb/issues
Tracking node-oracledb 2.0.13-Development issues完全なインストール手順は以下からご覧いただけます。
https://github.com/oracle/node-oracledb/issues/716
Installing node-oracledb Version 2しかし、node-oracledb 2.0はまだnpmに上がっていませんので、GitHubから以下のようにインストールする必要があります。
https://github.com/oracle/node-oracledb/blob/dev-2.0/INSTALL.md
oracledb on npm
https://www.npmjs.com/package/oracledb
Oracle Client 12.2、12.1、11.2のいずれかのライブラリ(例えばOracle Instant Client BasicもしくはBasic Lightパッケージ)をPATHもしくはLD_LIBRARY_PATH(またはそれに相当するもの)に通す必要があります。npm install oracle/node-oracledb.git#dev-2.0
Oracle Instant ClientmacOSをご利用の場合、Oracle Clientライブラリを~/libもしくは/usr/local/libに配置する必要があります。ODPI-Cを利用するとインストールが少々簡単になります。OracleのHeaderファイルはもう必要ありません。OCI_LIB_DIRとOCI_INC_DIRという環境変数は不要になっています。C++11をサポートするコンパイラ、Python 2.7は必要ですが、node-oracledbバイナリ1個だけでOracle Client 11.2、12.1、12.2で動作し、node-oracledbビルドをマシン間でコピーする際の移植性が向上しています。 古いクライアント・ライブラリがサポートしていない新しいOracle Databaseの機能を使用しようとすると、ランタイム・エラーが発生するため、デプロイメント環境に似た環境でテストを行ってください。
http://www.oracle.com/technetwork/database/features/instant-client/
このリリースにおけるその他の変更は以下の通りです。
Lob.close()
はclose()
メソッドの非同期版ではなく、LOBを即座に無効にします。そのため、他のメソッド呼び出しは全て無効になります。- Version 1で、LOB、ResultSetまたはその他のデータベース操作を実行中に接続を閉じようとした場合、この正しくないアプリケーション・ロジックの結果NJS-030、NJS-031またはNJS-032の「接続を解放できません」というエラーが発生していました。Version 2では接続を閉じることができますが、開いている接続に依存する操作は失敗します。
- 一部のNJSおよびDPIのエラーメッセージと番号が変更されました。これは特に、ODPI-C使用によるDPIエラーに当てはまります。
- 現在、Node.js 4、6、および8と互換性があります。
- (Stringとして)カラム型LONGと(Bufferとして)LONG RAWを取得できるようになりました。これらの型のストリーミングはサポートされていないため、Node.jsとV8のメモリ制限に達すると、DBに格納された値を完全に取得できない場合があります。ストリーミングできるLOBを使用するようにアプリケーションを変換する必要があります。
- TIMESTAMP WITH TIME ZONE日付型のサポートが追加されました。これらは、LOCAL TIME ZONEを使用してnode-oracledb内のDateオブジェクトにマッピングされます。TIME ZONEコンポーネントは、Node.jsのDateオブジェクトでは使用できません。
- ROWIDのサポートが追加されました。明示的なfetchAsStringは必要なくなりました。データはデフォルトでStringとして取得します。
- Added support for UROWIDのサポートが追加されました。データはStringとして取得します。
- NCHAR 列および NVARCHAR2 列のクエリがサポートされました。データベース文字セットおよびデータベースの各国語文字セットによってはDMLのバインディングでデータを正しく挿入できないことがあります。
- NCLOB 列のクエリがサポートされるようになりました。NCLOB データをストリームもしくはStringとして取得できます。データベース文字セットおよびデータベースの各国語文字セットによってはDMLのバインディングでデータを正しく挿入できないことがあります。
- LOB fetchAsString およびfetchAsBuffer クエリ、LOBバインドにおけるサイズ制限がなくなりました。Node.jsおよびV8のメモリ制限ゆえに一度に大きなLOBを操作できないのは今まで通りです。V1では11.2クライアントライブラリを使ってnode-oracledbと紐付けたユーザーにのみ制限が影響しました。
- エラーを生成するステートメントを、ステートメント・キャッシュから削除するようになりました。表定義が変更されている間に実行されているアプリケーションは、古くなったキャッシュエントリのために、使用不能なSQL文で終わらなくなっています。アプリケーションはまだエラーが発生することがありますが、それをトリガーにして無効なキャッシュエントリを削除し、以降の実行が成功するようにします。ODPI-Cには、いまの説明よりもずっと優れた方法でやる仕組みが備わっていますが、お尋ねになると、退屈させることになるかもしれません。もしくはODPI-Cのソースコードをチェックすることができます。
ODPI-Cソースコード(odpi/src/dpiStmt.c)
ご注意いただきたいのは、Oracleのベスト・プラクティスは、アプリケーション実行中に決して表定義を変更しない、ということです。いくつかのテストフレームワークが表定義を変更することを知っていますが。。
https://github.com/oracle/odpi/blob/v2.0.0-rc.1/src/dpiStmt.c#L535-L536
node-oracledb DPI Layer Extensionたとえば、Tamás Gulácsiは、ODPI-Cを使用するGoドライバを開発してきました(彼のブランチをチェックしてください)。
https://github.com/oracle/node-oracledb/tree/v1.13.1/src/dpi
Python interface to Oracle Database conforming to the Python DB API 2.0 specification
https://github.com/oracle/python-cx_Oracle
v5 with ODPI ?Kubo TakehiroもRust以外のプログラミング言語の選択を決める前に、Oracle Rustドライバの開発を開始しました!
https://github.com/rana/ora/issues/203
An Oracle database driver for the Go programming language.
https://github.com/rana/ora/tree/dpi
Oracle driver for Rust我々が表明しているnode-oracledbの計画では、node-oracledb 1.xのメンテナンスはNode 4のEoLにあわせ2018年4月1日で終了します。そのため、node-oracledb 2.0.13-Developmentのテストを開始します。
https://github.com/kubo/rust-oracle-wip
Node-oracledb 1.x and 2.x: Plans for 2017
https://github.com/oracle/node-oracledb/issues/601