stored-procedures - OperationalError:(1414,“例程“存储过程名称”的 OUT 或 INOUT 参数 1 不是 BEFORE 触发器中的变量或新伪变量”)
问题描述
我在使用 Airflow mysqlhook 在 python 中调用带有 out 参数的存储过程时遇到问题
存储过程的签名是 CREATE PROCEDURE sp_stage_processdata
(out p_status INT)
src_cursor.execute("CALL sp_stage_processdata(%s);", (status,))
我收到错误
OperationalError:(1414,'例程 sp_stage_processdata 的 OUT 或 INOUT 参数 1 不是 BEFORE 触发器中的变量或新伪变量')
在处理上述异常的过程中,又出现了一个异常:
我尝试删除参数,并且程序在 python 中执行得很好,所以没有错。
由于版本问题,我无法使用 cursor.callproc。
解决方案
使用OUT
时需要将 MySQL 变量传递给调用,并且不能直接传递值。
它应该看起来像:
CALL sp_stage_processdata(@p_status)
如果需要处理传递的值,可以有 2 个选项:
- 改变
OUT
toINOUT
和 useSET @p_status
and than 调用你的程序 拆分您的程序以使用
IN
,OUT
如下所示:sp_stage_processdata(out p_status_out INT, IN p_status)
所以你可以这样调用你的程序:
src_cursor.execute("CALL sp_stage_processdata(@p_status_out, %s);", (status,))
推荐阅读
- android - 无法在 Firebase 中添加项目
- android - 如何在没有加密的情况下在我的应用程序的密钥库中存储一个简单的字符串?
- python - /accounts/register/ NOT NULL 约束处的 IntegrityError 失败:accounts_profile.user_id
- python - ValueError:dense_10 层的输入 0 与该层不兼容:输入形状的预期轴 -1 的值为 256 bt rcwd 形状 (2, 16256)
- java - 具有多个 OR 的 CriteriaBuilder
- django - 当它嵌套在 Django 中的另一个序列化程序中时,如何在 URL 中过滤序列化程序?
- arrays - 可以用 =isoweeknum & =arrayformula 的公式自动填充列
- macos - Xamarin.Mac 部署问题
- python - 使用python将参数传递给mysql
- python - 使用 Selenium Python 未选择下拉选项