【问题标题】:Problem with executing Oracle procedure by Python通过 Python 执行 Oracle 过程的问题
【发布时间】:2021-11-01 18:20:17
【问题描述】:

我想在 Python 中执行一个 Oracle 过程。 SQL 端的过程写得很好。在 Python 代码中,它收到错误: ORA-06550 和 PLS-00306 - 数据库错误。

con = cx_Oracle.connect('***********')
cur = con.cursor()
faktura= "QQ0009365/21"
numer_listu = "421435636356536"
kod_k = int(112377)
out_data=str()
t = cur.callproc('QQ.ECOMMERCE.ZMIANA_OPISU_LIST_PRZEWOZOWY',[numer_listu,kod_k,faktura,out_data])

SQL Oracle 函数如下所示:

QQ.ECOMMERCE.ZMIANA_OPISU_LIST_PRZEWOZOWY(P_NUMER_LISTU => :P_NUMER_LISTU,
                                                         P_KOD_KURIERA => :P_KOD_KURIERA,
                                                         P_NUMER_FAKTURY => :P_NUMER_FAKTURY,
                                                         P_ERROR_INFO => :P_ERROR_INFO);

【问题讨论】:

  • 过程中的这些参数是否是输出参数?? ,比如p_error_info
  • 是的,P_ERROR_INFO是OUT参数VARCHAR
  • 字符串参数不应使用单引号,而应使用双引号,例如此处的一些示例 --> blogs.oracle.com/oraclemagazine/… 。我猜你有一个变量来获得输出,对吧?我一直对使用 callproc 传递给 Oracle PL 中的 varchar2 变量的字符串使用单引号。
  • P_ERROR_INFO 它是 VARCHAR2

标签: python oracle plsql cx-oracle


【解决方案1】:

out 参数必须声明为游标变量,即,

out_data = cursor.var(str)

错误表明传递给 PL/SQL 过程的参数数量错误。

通过 cx_Oracle 调用 pl/sql 存储过程请查阅 cx_Oracle 文档:https://cx-oracle.readthedocs.io/en/latest/user_guide/plsql_execution.html#plsqlproc

【讨论】:

    【解决方案2】:

    试试这个

    con = cx_Oracle.connect('***********')
    cur = con.cursor()
    faktura= 'QQ0009365/21'
    numer_listu = '421435636356536'
    kod_k = 112377
    out_data = cur.var(str)
    t = cur.callproc('QQ.ECOMMERCE.ZMIANA_OPISU_LIST_PRZEWOZOWY',[numer_listu,kod_k,faktura,out_data])
    return out_data.getvalue()
    except cx_Oracle.Error as error:
            print(error)        
    

    【讨论】:

    • ORA-06550: linia 1, kolumna 7: PLS-00221: 'ZMIANA_OPISU_LIST_PRZEWOZOWY' 不是过程或未定义 ORA-06550: linia 1, kolumna 7: PL/SQL: 语句被忽略跨度>
    • 你的用户是否有这个包的执行权限?好像没有
    • 我拥有此过程和数据库的所有权限
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多