5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[cx_Oracle入門](第19回) cx_Oracle8.1リリース

Last updated at Posted at 2020-12-12

連載目次

連載:cx_Oracle入門 目次

cx_Oracle8.1リリース

cx_Oracle 8.1がリリースされました。
以前のリリースの記事以降解説をすっ飛ばした8.0.1も含め、新機能、変更点などを解説します。

1. 利用ODPI-Cのバージョンの変更(8.0.1/8.1)

8.0はODPI-C 4.0.1をベースに開発されていました。8.0.1では4.0.2を、8.1では4.1.0をベースに開発されています。

2. 39~40桁のNUMBER型のハンドリングの不具合の修正(8.0.1)

cx_Oracleといよりは元となるODPI-Cの不具合の模様ですが、39~40桁のNUMBER型をcx_Oracleでやり取りする際に「cx_Oracle.DatabaseError: DPI-1044: value cannot be represented as an Oracle number」というエラーになる問題が発生していたのが修正されました。

以下、「NUMBER型って最大38桁じゃないの?」という疑問を持った方への解説です。
桁数を指定していないNUMBER型は、最大38桁の精度の数値を格納することが可能です。もう少し言い換えると、桁数指定をしていないNUMBER型は38桁を超える数値もハンドリングすることが可能です。しかし、精度は最大38桁なので、値が正しく入るのは最初の38桁までです。100桁を例にすると、上から38桁目までは値が入っていますが、下62桁はゼロになります。

3. setup.pyの変更(8.0.1)

8.0でサポート対象外となったPython2系へのインストールがエラーになるよう修正されました。

4. サポート対象Pythonバージョンの変更(8.1)

8.0.1まではPython3.5以上となっていましたが、2020年9月30日にPython 3.5自体のサポート期間が終了したため、8.1では3.5への対応が廃止され、3.6以降の対応となりました。また、Python 3.9がサポートされました。

5. ネイティブJSON型への対応(8.1)

Oracle Databaseは12cよりJSONをサポートしていますが、格納データ型はVARCHAR2のような既存の可変長文字列型でした。21cより、ネイティブなJSON型がサポートされました。DBのデータ型の名称は、そのまんま「JSON」です。cx_Oracleのデータ型名は「cx_Oracle.DB_TYPE_JSON」です。「ネイティブ」といっているのは、MongoDBで言うBSONのように、内部的にバイナリ化して保存し、アクセス速度を高めているからです。Oracleなので「OSON」と言ったりします。
cx_Oracle8.1より21cのJSON型に対応しました。SQLアクセスだけではなく、SODA APIも対応しています。

6. 未対応OCI属性の取得API(8.1)

元々cx_Oracleで対応していないOCIの属性を取得、設定できるインターナルなメソッドが追加されました。ただし、インターナルですし、リリースノートには「These methods should only be used as directed by Oracle.」とあるので、あまり一般的に利用されることは想定していないようです。
ここでは「OCI」はOracle Cloud Infrastructureではなく、Oracle Call Interfaceのことです。Oracle Call InterfaceはOracle Databaseへの最下層のアクセスAPIです。cx_Oracleの元となるODPI-CがOCIを利用して作成されています。ODPI-CはOCIが提供するすべての機能を網羅してはいません。結果、ODPI-Cに依存しているcx_Oracleもその制限を受けます。その制限を、属性へのアクセスについては回避できる手段ができた、ということだと思われます。

7. Alex Henrie氏のコード品質改善のpull requestの受け入れ

この方、8.0の際にも貢献してくださっていますね。

8. setup.pyの改善(8.1, タイトルのみ)

9. prefetchrowの仕様変更(8.1)

REF_CURSOR型の変数が優先されるようになりました。

10. データ型のシリアライズが復活(8.1)

pickleモジュールを使用したcx_Oracleデータ型のシリアライズが再度できるようになりました(解釈に自信なし)

11. tox対応(8.1)

toxを使用したテストに対応しました。

12. その他

ドキュメントの改善が行われています。

参考リンク

cx_Oracle 8.1に言及しているOracle社のブログ(英語)
cx_Oracle リリースノート(英語)

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?