gpt4 book ai didi

python - 从 Python 中的 cx_Oracle PL/SQL 调用返回变量

转载 作者:太空狗 更新时间:2023-10-29 21:18:37 26 4
gpt4 key购买 nike

我想在 Python 中通过 cx_oracle 执行 Oracle PL/SQL 语句。代码如下所示:

db = cx_Oracle.connect(user, pass, dsn_tns)
cursor = db.cursor()

...

sel = """
DECLARE
c NUMBER := 0.2;
mn NUMBER := 1.5;
res NUMBER;
BEGIN
res := c+mn/6.;
END;
"""
try:
cursor.execute(sel)
print "PL/SQL successful executed ..."
except cx_Oracle.DatabaseError as e:
err, = e.args
print "\n".join([str(err.code),err.message,err.context])

代码运行没有问题,但是否有机会将结果返回给 Python?

最佳答案

您可以像这样将输入和输出变量绑定(bind)到 block 。

import cx_Oracle

SQL_BLOCK = '''
DECLARE
v_first NUMBER;
v_second NUMBER;
v_result NUMBER;
BEGIN
v_first := :i_first; -- (1)
v_second := :i_second; -- (1)

v_result := (v_first + v_second) / 2;

:o_result := v_result; -- (1)
END;
'''

with cx_Oracle.connect('hr/hr@xe') as db:
cur = db.cursor()
o_result = cur.var(cx_Oracle.NUMBER) # (2)
cur.execute(SQL_BLOCK, i_first=23, i_second=55, o_result=o_result) # (3)
res = o_result.getvalue() # (4)
print('Average of 23 and 55 is: {}'.format(res))
  1. 在 PL/SQL block 中对输入和输出变量使用常规绑定(bind)符号 (:)
  2. 对于输出变量,从游标获取一个变量(适当的类型)
  3. 在执行调用中,为输入变量和 (2) 中的变量提供值作为参数
  4. 从输出变量中检索值

脚本应该打印

Average of 23 and 55 is: 39.0

关于python - 从 Python 中的 cx_Oracle PL/SQL 调用返回变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18267935/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com