Stored procedures 操作错误:(例程';存储过程名称';的1414、';OUT或INOUT参数1在触发器';之前不是变量或新的伪变量)

Stored procedures 操作错误:(例程';存储过程名称';的1414、';OUT或INOUT参数1在触发器';之前不是变量或新的伪变量),stored-procedures,parameter-passing,airflow,mysql-python,out,Stored Procedures,Parameter Passing,Airflow,Mysql Python,Out,在python中使用mysqlhook调用带out参数的存储过程时遇到问题 存储过程的签名是 创建过程sp\u stage\u processdata(out p\u status INT) src_cursor.execute(“调用sp_stage_processdata(%s);”,(状态,) 我犯了一个错误 操作错误:(1414,'例程sp_stage_processdata的OUT或INOUT参数1不是变量或触发器前的新伪变量') 在处理上述异常期间,发生了另一个异常: 我尝试删除参数

在python中使用mysqlhook调用带out参数的存储过程时遇到问题

存储过程的签名是 创建过程
sp\u stage\u processdata
(out p\u status INT)

src_cursor.execute(“调用sp_stage_processdata(%s);”,(状态,)

我犯了一个错误

操作错误:(1414,'例程sp_stage_processdata的OUT或INOUT参数1不是变量或触发器前的新伪变量')

在处理上述异常期间,发生了另一个异常:

我尝试删除参数,并且该过程在python中执行良好,所以并没有什么问题


由于版本问题,我无法使用cursor.callproc。

使用
OUT
时,需要向调用传递MySQL变量,不能直接传递值

它应该看起来像:

CALL sp_stage_processdata(@p_status)
如果需要处理传递的值,可以有2个选项:

  • OUT
    更改为
    INOUT
    ,然后使用
    SET@p_status
    调用您的过程
  • 将过程拆分为使用
    IN
    OUT
    ,如下所示:

    sp\u stage\u processdata(out p\u status\u out INT,IN p\u status)

    因此,您可以这样调用您的过程:

    src_cursor.execute(“调用sp_stage_processdata(@p_status_out,%s);”,(status,)