Mysql - 存储过程 OUT 变量返回 null

2023-12-10

我的表结构是:

DROP TABLE IF EXISTS `child`;

CREATE TABLE `child` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


DROP TABLE IF EXISTS `map_parent_child`;

CREATE TABLE `map_parent_child` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) NOT NULL,
  `child_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_parent_child` (`parent_id`,`child_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

DROP TABLE IF EXISTS `parent`;

CREATE TABLE `parent` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我创建了一个存储过程,例如

DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`sp_parent`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_parent`(
    IN parent_name VARCHAR(255),
    IN child_name VARCHAR(255),
    OUT parent_id INT(11))
BEGIN   
    DECLARE parent_id INT DEFAULT 0;
    DECLARE child_id INT DEFAULT 0;

    START TRANSACTION;

        INSERT INTO `parent` (`name`) VALUES(parent_name);      

        SET parent_id = LAST_INSERT_ID();

        INSERT INTO `child` (`name`) VALUES(child_name);

        SET child_id = LAST_INSERT_ID();

        INSERT INTO `map_parent_child` (`parent_id`,`child_id`) VALUES(parent_id,child_id); 
    commit;
END$$
DELIMITER ;

CALL sp_parent("test", "test", @parentid);

但是当我尝试使用 select 获取输出变量时,我得到 NULL,但是所有 INSERT 语句都可以正常工作并将记录添加到数据库表中。

SELECT @parentid;

我在这里缺少什么?


您现在可能已经解决了这个问题,但是我注意到您的存储过程的第一件事是您有一个与输出变量同名的局部变量(parent_id)。在我看来,您正在设置局部变量的值而不是返回变量,因此调用者永远看不到正确的值。

也许删除本地parent_id变量声明将解决您的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql - 存储过程 OUT 变量返回 null 的相关文章

  • MySQL 中两个 Select 查询的结果相减

    我编写了两个 mysql 查询 一个获取一年中特定月份的总用户 注册 另一个获取一年中特定月份的活跃用户 我需要找到数量inactive当年的用户 为此 我正在考虑减去通过两个单独的查询获得的总用户数和活动用户列 以下是查询 1 Fetch
  • 可以使用多个数据库连接

    tSQLt 世界的新手 很棒的工具集 在我正在为其设置测试的存储过程中遇到了一个小问题 如果由于某种原因我有一个连接到多个数据库甚至多个 SQL 服务器 链接服务器 的存储过程 在这种情况下是否可以使用 tSQLt 进行单元测试 我已经评论
  • 使用 PHP 连接到 Amazon RDS

    我正在尝试将 RDS 实例与 PHP 连接文件连接 这是我的文件中的内容 define DB SERVER localhost define DB USERNAME User Name define DB PASSWORD Password
  • 按升序选择最后 20 个顺序 - PHP/MySQL

    这是我的表结构 MyTable ID P K auto increment TopicID UID Comment 现在我想获取某个 TopicID 的最后 20 条评论 但它应该按升序排序 就像 Facebook 默认只显示最后 20 条
  • 选择列中包含确切数字的行,其中一组数字以逗号分隔

    也许答案很简单 但我找不到正确的 MySQL 查询来完成我想要的操作 我有桌子user id user name action type 1 joshua 1 13 12 40 2 joshua 2 8 我只想选择具有确切数字的行actio
  • PHP 构造函数返回 NULL

    我有这个代码 是否有可能User对象构造函数以某种方式失败 以便 this gt LoggedUser被分配了一个NULL构造函数返回后值和对象被释放吗 this gt LoggedUser NULL if SESSION verbiste
  • 如何连接flutter到localhost mysql数据库

    我想将本地主机 mysql 数据库连接到 flutter 但我没有这样做 我尝试了 mysql1 与这些连接 ConnectionSettings host 10 0 2 2 port 3306 user root password roo
  • 如何使用户输入与变量相关?

    我不知道如何准确地表达这个问题 但这就是我想要实现的目标 我正在使用堆栈实现河内塔插图 这是里面的main 功能 System out println Type the source pole number and the destinat
  • REACT NATIVE 从本地 MySQL 数据库检索数据

    我正在用 React Native 编写一个应用程序 并且创建了一个 MySQL 数据库来存储我的信息 但我想知道是否可以使用 axios 或 fetch 与我的数据库交互 因为它是本地的并且没有 HTTP 地址然而 我觉得我以前能够做到这
  • 未捕获的错误:调用未定义的函数 mysql_connect() [重复]

    这个问题在这里已经有答案了 未捕获错误 调用 C xampp htdocs phoenixproject register php 9 中未定义的函数 mysql connect 堆栈跟踪 0 main 在第 9 行 C xampp htd
  • WAMP/MySQL 错误语言不正确

    我已经多次重新安装WAMP 搜索了数百页 但仍未解决此问题 我查看了 phpmyadmin 配置文件 设置 cfg Lang en utf 8 卸载了多次 如上所述 似乎没有运气 任何帮助 将不胜感激 要更改 MySQL 在报告时使用的语言
  • 绕过外键约束强制删除mysql

    我试图从数据库中删除除一个表之外的所有表 最终出现以下错误 无法删除或更新父行 外键约束失败 当然 我可以反复试验来看看这些关键约束是什么 并最终删除所有表 但我想知道是否有一种快速方法来强制删除所有表 因为我将能够重新插入那些我想要的表
  • TryXXX 类似带有“out”参数的方法与返回可为空值类型的方法?

    我经常在 C 中看到这样的方法 进行可能会或可能不会给出结果的计算 bool TrySomething SomeType inputData out SomeOtherType result 为什么人们不使用这样的东西呢 Nullable
  • ERROR 188 (HY000): FTS 查询超出结果缓存限制 mysql

    我的表的文本列上有全文索引 约有 1100 万行 表结构 CREATE TABLE review id int 11 NOT NULL AUTO INCREMENT comments text COLLATE utf8mb4 unicode
  • 在 MySQL 中查找 varchar 是否包含百分号

    找不到这个问题的答案 在 MySQL 中 如何选择特定列 varchar 包含百分号 的行 where col like escape
  • 如何正确转义 mysql“搜索/喜欢”查询?

    Summary 我目前正在使用 search field LIKE this gt db gt escape like str search string 逃避动态创建的搜索查询 创建的 SQL 语句结果不会产生任何错误 也不会产生任何结果
  • MySQL:主键的所有部分都必须为 NOT NULL;如果您需要在键中使用 NULL,请使用 UNIQUE 代替

    我的 MySQL 有问题 我创建了名为 BucketList 的数据库 然后尝试创建名为 tbl user 的表 它看起来像这样 CREATE TABLE BucketList tbl user user id BIGINT NULL AU
  • PHP:测试三个变量是否相等

    我以前从未遇到过这种情况 但是如何测试三个变量是否相同 以下内容显然不起作用 但我想不出一种优雅 且正确 的方式来编写以下内容 if select above average select average select below aver
  • 使用 EntityFramework 使用空参数值调用存储过程

    我在 sqlserver 2008 上有一个存储过程 其中一个参数接受空值 我不知道如何使用参数上的空值来调用该 SP 为了获得更多上下文 我正在使用 EntityFramework 6xx 在下一个示例中 参数 status Compat
  • 如何在 MySQL 查询编辑器中对列重新排序?

    我想移动专栏OtherSupport below Amount2 是否有捷径可寻 ALTER TABLE myTable MODIFY OtherSupport VARCHAR 50 AFTER Amount2

随机推荐

  • Python 中动态表单的 Web Scraper

    我正在尝试填写该网站的表格http www marutisuzuki com Maruti Price aspx 它由三个下拉列表组成 一是汽车型号 二是州 三是城市 前两个是静态的 第三个城市是根据州的值动态生成的 有一个 onclick
  • 如果任何字段包含 NULL,MySQL CONCAT 将返回 NULL

    我的表 设备 中有以下数据 affiliate name affiliate location model ip os type os version cs1 inter Dell 10 125 103 25 Linux Fedora cs
  • Google Apps 脚本表单:e.namedValues 不记录任何内容

    我有一个非常基本的 Google Apps 表单 其中包含两个问题 资源 带有两个选项的单选按钮 和名称 文本字段 我想在提交时选择表单值 因此我设置了一个触发器 在表单提交时 来调用函数 function onFormSubmit e L
  • Perl,使脚本在x秒后超时?

    我一直在搜索这个问题 但令人惊讶的是很难得到一个直接的答案 因为 php 似乎有关于这个主题的更多信息 我需要让我的 perl 脚本在指定的秒数后终止 因为 就像现在一样 它们运行时间太长并堵塞了我的系统 我怎样才能使整个脚本在指定的秒数后
  • Java-改变秋千背景颜色?

    好的 我得到了一个使用 系统 外观的 Swing 应用程序 现在 我想将主面板的背景颜色更改为黑色 太容易了吧 UIManager put Panel background Color BLACK 是的 除了现在应用程序中的控件看起来很愚蠢
  • 如何获取 Windows 中所有打开的命名管道的列表?

    有没有一种简单的方法来测试命名管道是否正常工作 我想确保从应用程序发送的数据确实已发送 有没有一种快速简便的方法来获取所有命名管道的列表 在 Windows Powershell 控制台中 键入 System IO Directory Ge
  • 无法保存/传递父级对组合对象的引用

    在 C 中 它会是这样的struct A由 组成struct B和一些功能B获取指向父对象的指针A 所以函数为A调用该函数B将简单地通过this指向它的指针 我正在 Rust 中尝试此操作 但未能使其正常工作 这就是我想要实现的目标 str
  • 从经典 ASP 调用 COM 对象

    如何从经典 ASP 调用 COM 对象 我努力尝试但找不到好的教程 有什么建议吗 我在经典 ASP 中使用 C 要在经典 ASP 中实例化 COM 对象 Dim rs Set rs Server CreateObject ADODB Rec
  • lxml.html。读取文件时出错;无法加载外部实体

    我正在尝试使用 lxml html 解析从 YouTube 获取电影预告片 url from lxml import html import lxml html from lxml etree import XPath def get yo
  • solr 数据导入错误:索引失败。回滚所有更改

    当我运行 完全导入并清理 命令时 错误是 索引失败 回滚所有更改 我的数据导入配置文件
  • iAds 不适用于 iPad 应用程序吗?

    我有一个 iPad 应用程序 它需要 iAds 但在库中我找不到广告横幅视图 iAds 不适用于 iPad 吗 我使用的是 iOS SDK 4 1 在 iPad 应用程序中实施的其他替代方案是什么 您需要使用 iOS SDK 4 2 因为
  • ScalaTest 可以在没有同步调用的情况下检测超时吗(比如在无限循环中?)

    在下面的代码中 测试称为sleep优雅地失败 而测试freeze导致测试永远不会结束 import org scalatest FunSuite import org scalatest concurrent TimeLimitedTest
  • 如何将 C++ wstring UTF-8 字符打印到 Mac OS 或 Unix 终端?

    我怎样才能打印一个std wstring using std wcout 我尝试了以下推荐的方法here 但它仅适用于打印此 Hola 但不是这个日本 include
  • 在应用颜色的同时对图像应用阴影

    我正在根据 HSV 的 3 个滑块值更改汽车的颜色 我可以改变颜色 但感觉就像油漆 颜色改变后的图像没有原创性 我如何应用阴影和效果 我如何应用输入图像中的阴影和效果 您好 您可以参考下面的 C 代码 这里我仅更改色调值 如果您想更改饱和度
  • 在 C++ 中的向量向量上使用“unique()”

    我希望这不是一个重复的问题 但如果是 请随时为我指出正确的方向 我有一个vector
  • 当不支持-XX:+PrintFlagsFinal时如何找到默认的MaxPermSize?

    我正在使用一个系统 其中可以同时启动许多作为 Java 应用程序实现的作业 每个作业都在单独的 JVM 中运行 其中一些工作需要比其他工作更大的永久元大小 然而 由于操作系统内存有限 让所有作业都使用最大值是不可行的 因此 我想指定 XX
  • eWay支付网关

    我正在尝试实现来自 eway 澳大利亚 的定期网络服务 但是我无法让它工作 我不断收到消息 命名空间 中的元素 rebillCustomerCreate http www eway com au gateway rebill manageR
  • 使用 gspread 将 CSV 上传到 Google 表格

    我有一个 Json 对象需要上传到 Google 电子表格 我搜索并阅读了各种资源 但找不到解决方案 有没有办法使用 gspread 将对象或 csv 从本地上传到谷歌电子表格 我宁愿不使用谷歌客户端API 谢谢 您可以使用导入 CSV 数
  • Pandas 中数据为负时为红线,数据为正时为绿线

    I wanted to have the data in this graph as red when y is below 0 and green when it is above 0 我正在尝试这个 但没有成功 import panda
  • Mysql - 存储过程 OUT 变量返回 null

    我的表结构是 DROP TABLE IF EXISTS child CREATE TABLE child id int 11 NOT NULL AUTO INCREMENT name varchar 255 NOT NULL PRIMARY