OperationalError:(1414,例程“存储过程名称”的“ OUT或INOUT参数1不是触发器之前的变量或NEW伪变量”)

时间:2019-11-01 04:55:16

标签: stored-procedures parameter-passing airflow mysql-python out

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

存储过程的签名是 创建过程sp_stage_processdata(在p_status INT中)

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

我遇到错误

OperationalError:(1414,“例程sp_stage_processdata的OUT或INOUT参数1不是触发器之前的变量或NEW伪变量”)

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

我尝试删除参数,并且过程在python上执行良好,所以没有错。

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

1 个答案:

答案 0 :(得分:0)

使用OUT时,您需要将MySQL变量传递给调用,并且不能直接传递值。

它看起来应该像这样:

CALL sp_stage_processdata(@p_status)

如果您需要处理传递的值,则可以有2个选项:

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

    sp_stage_processdata(out p_status_out INT, IN p_status)

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

    src_cursor.execute("CALL sp_stage_processdata(@p_status_out, %s);", (status,))