Oracle-python cx_oracle-在数据提取之前包含“ exec schema.get”

时间:2018-07-26 12:43:19

标签: python oracle toad

我是oracle的新手,我正在尝试建立从python到oracle表的连接。

我可以使用Toad for oracle访问一个表的数据。我正在通过python运行相同的SQL命令,并且收到“ DatabaseError:ORA-00942:表或视图不存在”。我进行了大量搜索,但仍然不知道问题出在哪里:

我建立了我的连接:

import cx_Oracle
con = cx_Oracle.connect(<user>,<password>,<database name>)
print("Database version:", con.version)

成功连接

我设置了当前模式

con.current_schema = 'schema_name'

cursor = con.cursor()
cursor.execute('select du.cfile_id from table_name du')

这将引发以下错误:

---------------------------------------------------------------------------
DatabaseError                             Traceback (most recent call last)
<ipython-input-195-f3f5aacf8431> in <module>()
----> 1 cursor.execute('select du.cfile_id from brwr_tau_to_du_log du')

DatabaseError: ORA-00942: table or view does not exist

如果我使用“ Toad for oracle”,则具有相同凭据的相同查询可以正常工作。请注意,我需要在Toad上运行数据提取之前放入“ exec schema.PKG_DVS_ACCESS.get”。我应该如何在我的python代码中包含命令?

谢谢

1 个答案:

答案 0 :(得分:1)

要在cx_Oracle中调用PL / SQL过程和程序包,请使用callproc

cursor.callproc('myproc')

如果PL / SQL过程具有参数,则必须绑定数据值。

myvar = cur.var(int)
cur.callproc('myproc', (123, myvar))
print(myvar.getvalue())

看看cx_Oracle tutorial

更新:Oracle的新blog post讨论了有关将PL / SQL与cx_Oracle一起使用的情况。