【发布时间】: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 函数的语法和复杂性感到沮丧。