python - 从 Python 3.5 编译 Oracle 包时,不会填充 Oracle 12c DBA_IDENTIFIERS

标签 python python-3.x oracle oracle-sqldeveloper oracle12c

Oracle 12cR1

Python 3.5

plscope_settings = IDENTIFIERS:ALL

要求:我们需要识别给定 Oracle 包内子程序的起始行和结束行。

设计:为此,我们使用DBA_IDENTIFIERS。数据库参数 PLSCOPE_SETTINGS 已设置为 IDENTIFIERS:ALL。为了填充给定 Oracle 包的标识符,我们从代码版本管理器中获取最新版本的 Oracle 包,并在开发数据库中对其进行编译。编译是使用 Python 3.5 脚本完成的。

获得的结果:编译后,DBA_OBJECTS 显示此 Oracle 包,STATUSVALID。这样包就编译成功了。然而,DBA_IDENTIFIERS 没有为任何给定的 Oracle 包进行填充。当在 Oracle SQL Developer 中手动编译同一个 Oracle 包时,DBA_IDENTIFIERS 将会被填充。

预期结果:当 Python 脚本编译包含 Oracle 包和包主体的 SQL 文件时,必须填充 DBA_IDENTIFIERS

我们在这里遗漏了什么吗?任何输入都会非常有帮助。

--------------------用Python代码的修改版本进行更新--------------

import cx_Oracle as ora
conn = ora.connect("myuser/mypwd@myservice")
cur = conn.cursor()
with open("/fodler1/folder2/pkh/mypkg.sql","r") as sqlFile:
    sql = sqlFile.read()
    cur.execute(sql)
with open("/fodler1/folder2/pkb/mypkg.sql","r") as sqlFile:
    sql = sqlFile.read()
    cur.execute(sql)
cur.close()
conn.close()

最佳答案

我建议检查您用于连接到 Oracle DB 的库是否不覆盖 DB plscope_settings。

如果是,那么您应该添加:

ALTER SESSION SET plscope_settings = 'IDENTIFIERS:ALL;

关于python - 从 Python 3.5 编译 Oracle 包时,不会填充 Oracle 12c DBA_IDENTIFIERS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52914424/

相关文章:

python - 将值放在矩阵中的随机位置

mysql - 选择最佳输出

python - 将 CSV 从 Kafka 发送到 Spark Streaming

python - 在简单的 pandas 数据框上使用 tsfresh

Python3 : Reportlab Image - ResourceWarning: unclosed file <_io. BufferedReader 名称=...>

python - 参数和签名的使用

java - 以最小的开销插入两个表

c# - Entity Framework 将数字(1)转换为 bool 帮助?

python - 带有鲜花的 Tensorflow 示例

javascript - 带有子域配置的损坏的 django-debug-toolbar 面板