使用Python 2.7.5中的cx_Oracle模块调用callproc函数执行脚本

2024-05-15 23:30:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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()

当我执行此语句时,也会出现异常,但这次数据库中没有任何更改:

“内置函数或方法”对象没有属性“getitem

有人能指出我哪里不正确,我应该如何修改声明,以便它将工作。

非常感谢!

分辨率:

我对callproc和callfunc函数的语法和复杂性感到沮丧。 我找到了好的资源:http://dbaportal.eu/sidekicks/sidekick-cx_oracle-code-paterns/#part1 在这个链接中,我找到了有关如何使用cx_Oracle库的所有必要信息和示例。

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

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

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


Tags: 函数env脚本idcoderesultcursordba
1条回答
网友
1楼 · 发布于 2024-05-15 23:30:37

例外情况是,您正在使用[ ]而您应该使用()

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

请记住,返回类型是必需的:

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

Call a function with the given name. The return type is specified in the same notation as is required by setinputsizes(). The sequence of parameters must contain one entry for each argument that the function expects. Any keyword parameters will be included after the positional parameters. The result of the call is the return value of the function.

相关问题 更多 >