代码之家  ›  专栏  ›  技术社区  ›  ArtBajji

当从python 3.5编译Oracle包时,Oracle 12c DBA_标识符不填充。

  •  1
  • ArtBajji  · 技术社区  · 6 年前
    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_标识符 不会为任何给定的Oracle包填充。当手动编译同一个Oracle包时 Oracle SQL Developer , DBA_标识符 正在填充。

    预期结果: 当python脚本编译包含Oracle包和包体的SQL文件时, DBA_标识符 必须填充。

    我们这里缺东西了吗?任何输入都将非常有用。

    ------------用修改后的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()
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Lukasz Szozda    6 年前

    我建议检查用于连接到Oracle数据库的库是否不会覆盖db plscope_设置。

    如果是,则应添加:

    ALTER SESSION SET plscope_settings = 'IDENTIFIERS:ALL;