【问题标题】:Executing script by using function callproc from cx_Oracle module in python 2.7.5在 python 2.7.5 中使用 cx_Oracle 模块中的函数 callproc 执行脚本
【发布时间】:2014-01-31 11:03:50
【问题描述】:

我对 Python 比较陌生。 我目前正在 Oracle DB 中执行 SQL 语句。

当我执行查询时:

query = 'select * from table' 
cursor.execute(query)
result = cursor.fetchall()

一切正常,但是当我尝试执行脚本时:

纯文本脚本:

begin
 SIEBEL_DBA.X_DR_DEPLOY(id => '1-4NANEI', env_code => 'SVE_SIT');
end;
/

脚本代码

script = "begin\nSIEBEL_DBA.X_DR_DEPLOY(id => '1-4NANEI', env_code => 'SVE_SIT');\nend;"
cursor.execute(script)

result = cursor.fetchall()

我得到一个例外,这不是一个查询,但这个脚本仍然有效。

所以从我用谷歌搜索的结果来看,我应该使用 callproc 函数:

cursor.callproc['SIEBEL_DBA.X_DR_DEPLOY',{'id' : '1-4NANEI', 'env_code' : 'SVE_SIT'}]
connection.commit()

result = cursor.fetchall()

当我执行这个语句时,我也得到了异常,但是这次 DB 没有任何改变:

“builtin_function_or_method”对象没有属性“getitem

有人可以指出我不正确的地方以及我应该如何修改语句以使其正常工作。

提前非常感谢!

解决方案:

我对 callproc 和 callfunc 函数的语法和复杂性感到沮丧。 我找到了很好的资源:@​​987654321@ 在此链接中,我找到了有关如何使用 cx_Oracle 库的所有所需信息和示例。

最后我只需要修改一点我的代码:

cursor.callproc('SIEBEL_DBA.X_DR_DEPLOY', ['1-4NANEI', 'SVE_SIT'])

所需的部分已经完成,我不需要指定任何返回类型,因为我正在执行的脚本不返回任何值,它只是设置它。

【问题讨论】:

  • 我对 callproc 和 callfunc 函数的语法和复杂性感到沮丧。

标签: python sql cx-oracle


【解决方案1】:

例外是因为您使用的是[ ],而您应该使用()

cursor.callproc('SIEBEL_DBA.X_DR_DEPLOY',{'id' : '1-4NANEI', 'env_code' : 'SVE_SIT'})

记住返回类型是必需的:

Cursor.callfunc(name, returnType, parameters=[], keywordParameters = {})

使用给定名称调用函数。返回类型在 与 setinputsizes() 所需的符号相同。的顺序 参数必须为函数的每个参数包含一个条目 预计。任何关键字参数都将包含在位置之后 参数。调用的结果是返回值 功能。

【讨论】:

  • 感谢您的输入,它清除了我的一些想法,但并不完全!我已经为我的第一篇文章添加了分辨率,还添加了我为了修复它而阅读的资源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多