Oracle 12cR1
Python 3.5
plscope_settings = IDENTIFIERS:ALL
要求:我们需要识别给定 Oracle 包内子程序的起始行和结束行。
设计:为此,我们使用DBA_IDENTIFIERS
。数据库参数 PLSCOPE_SETTINGS
已设置为 IDENTIFIERS:ALL
。为了填充给定 Oracle 包的标识符,我们从代码版本管理器中获取最新版本的 Oracle 包,并在开发数据库中对其进行编译。编译是使用 Python 3.5
脚本完成的。
获得的结果:编译后,DBA_OBJECTS
显示此 Oracle 包,STATUS
为 VALID
。这样包就编译成功了。然而,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/