Python3.6/Oracle 18c/Oracle Client 12 问题 (OCI-22303)
Python 3.6 / Oracle 18c / Oracle Client 12 issue (OCI-22303)
我想在这里提出一个问题,我必须知道其他人是否有同样的问题(并修复了它:))
我有一个使用 cx_oracle 6.0.3 的 Python 脚本(3.6.1 64 位)。连接 ot Oracle 18c 数据库。
连接运行良好。
我的问题是当我尝试使用 gettype.
从数据库类型定义创建 Python 变量时
这是我的例子:
db = cx_Oracle.connect("scott/tigger@oracle_18c")
res = db.gettype("type_employee").newobject()
根据配置,我遇到以下问题:
2018-10-31 15:28:15,019 - ERROR - OCI-22303: type ""."type_employee" not found
对于 Oracle 11g,该脚本运行良好。
使用 Oracle 18c 取决于我使用的 Oracle 客户端(我想,这就是我在调查中的位置)。当我使用 Oracle 11.1.0.x 客户端时,它运行良好。当客户端是 Oracle 12 时会出现此问题。
我还有其他测试/更改要进行:
- 升级cx_oracle以使用版本7.0.0
- 使用 Oracle 11g DB 测试客户端 Oracle 12
我会尽快将结果发布在这里。
有没有人遇到/有同样的问题,可以分享经验/解决方案?
谢谢。
编辑 1
我在 Oracler 18c DB 上进行了额外的配置测试:
- Python 3.6.1 64 位,CX-ORACLE 6.0.3,Oracle 客户端 11 64 位 => 好
- Python 3.6.1 64 位,CX-ORACLE 7.0.0,Oracle 客户端 11 64 位 => 好
- Python 3.6.1 64 位,CX-ORACLE 7.0.0,Oracle 客户端 12 64 位 => NOK
- Python 3.6.1 64 位,CX-ORACLE 6.0.3,Oracle 客户端 12 64 位 => NOK
使用 Oracle 客户端 12 32 位没有意义,因为它与我的配置不兼容。
编辑 2
我在 Oracler 11g DB 上进行了额外的配置测试:
- Python 3.6.1 64 位,CX-ORACLE 6.0.3,Oracle 客户端 11 64 位 => 好
- Python 3.6.1 64 位,CX-ORACLE 7.0.0,Oracle 客户端 11 64 位 => 好
- Python 3.6.1 64 位,CX-ORACLE 7.0.0,Oracle 客户端 12 64 位 => OK
- Python 3.6.1 64 位,CX-ORACLE 6.0.3,Oracle 客户端 12 64 位 => OK
问题是命令对 Oracle Client 12 和 Oracle 18c DB 区分大小写(Oracle 11g 没有问题)。
如果我用
更改我的代码
res = db.gettype("TYPE_EMPLOYEE").newobject()
工作正常
我想在这里提出一个问题,我必须知道其他人是否有同样的问题(并修复了它:))
我有一个使用 cx_oracle 6.0.3 的 Python 脚本(3.6.1 64 位)。连接 ot Oracle 18c 数据库。 连接运行良好。 我的问题是当我尝试使用 gettype.
从数据库类型定义创建 Python 变量时这是我的例子:
db = cx_Oracle.connect("scott/tigger@oracle_18c")
res = db.gettype("type_employee").newobject()
根据配置,我遇到以下问题:
2018-10-31 15:28:15,019 - ERROR - OCI-22303: type ""."type_employee" not found
对于 Oracle 11g,该脚本运行良好。 使用 Oracle 18c 取决于我使用的 Oracle 客户端(我想,这就是我在调查中的位置)。当我使用 Oracle 11.1.0.x 客户端时,它运行良好。当客户端是 Oracle 12 时会出现此问题。
我还有其他测试/更改要进行:
- 升级cx_oracle以使用版本7.0.0
- 使用 Oracle 11g DB 测试客户端 Oracle 12
我会尽快将结果发布在这里。
有没有人遇到/有同样的问题,可以分享经验/解决方案?
谢谢。
编辑 1
我在 Oracler 18c DB 上进行了额外的配置测试:
- Python 3.6.1 64 位,CX-ORACLE 6.0.3,Oracle 客户端 11 64 位 => 好
- Python 3.6.1 64 位,CX-ORACLE 7.0.0,Oracle 客户端 11 64 位 => 好
- Python 3.6.1 64 位,CX-ORACLE 7.0.0,Oracle 客户端 12 64 位 => NOK
- Python 3.6.1 64 位,CX-ORACLE 6.0.3,Oracle 客户端 12 64 位 => NOK
使用 Oracle 客户端 12 32 位没有意义,因为它与我的配置不兼容。
编辑 2
我在 Oracler 11g DB 上进行了额外的配置测试:
- Python 3.6.1 64 位,CX-ORACLE 6.0.3,Oracle 客户端 11 64 位 => 好
- Python 3.6.1 64 位,CX-ORACLE 7.0.0,Oracle 客户端 11 64 位 => 好
- Python 3.6.1 64 位,CX-ORACLE 7.0.0,Oracle 客户端 12 64 位 => OK
- Python 3.6.1 64 位,CX-ORACLE 6.0.3,Oracle 客户端 12 64 位 => OK
问题是命令对 Oracle Client 12 和 Oracle 18c DB 区分大小写(Oracle 11g 没有问题)。 如果我用
更改我的代码res = db.gettype("TYPE_EMPLOYEE").newobject()
工作正常