gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:30:35 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com