Mysql 带游标的存储过程

2024-01-06

Mysql游标问题?

我编写了一个存储过程,它将从一个表中获取旅行记录并将其插入到 2-3 个不同的表中 使用插入语句。

问题是我正在检查 table1 中是否不存在记录,然后我将记录从 temptable 顺序插入到 table1 、table2 ,但情况有一些问题,我不知道它总是进入其他部分。

代码示例如下:

CREATE PROCEDURE `insertData`(In clientNo INT,In usedID INT)
BEGIN

declare mame varchar(100);
declare address varchar(100);
declare city varchar(50);
declare IdentityNO1 varchar(20)


declare cur1 cursor for select * from temptable;
declare continue handler for not found set done=1;

SET @clientNo = clientNO;
SET @userID = userID;


    set done = 0;
    open cur1;
    igmLoop: loop
        fetch cur1 into Name,Address,City,IdentityNO1,clientNo;
        if done = 1 then leave igmLoop; end if;

        //If no record exists in some records table1,table2.
        IF ( (SELECT COUNT(*) FROM table1 
               WHERE IndentityNo=IdentityNo1 
                 AND clientNo=@clientNo) < = 0)
              INSERT INTO table1 (Name,IdentityNO) VALUES (name,IdentityNO1);
              INSERT INTO table2 (Address,City) VALUES(address,city);
        ELSE
              INSERT INTO tblexceptional(Name,Address,City,IdentityNo)
              VALUES(name,address,city,IdentityNo1);
    end loop igmLoop;
    close cur1;
END

没有THEN nor END IF关键字,程序无法编译。
检查此链接的正确语法IF陈述:http://dev.mysql.com/doc/refman/5.7/en/if.html http://dev.mysql.com/doc/refman/5.7/en/if.html

Use EXIST运算符而不是(SELECT count(*)... ) <=0,
阅读此链接即可了解原因:http://sqlblog.com/blogs/andrew_kelly/archive/2007/12/15/exists-vs-count-the-battle-never-ends.aspx http://sqlblog.com/blogs/andrew_kelly/archive/2007/12/15/exists-vs-count-the-battle-never-ends.aspx

IF    EXISTS(  
               SELECT null FROM table1 
               WHERE IndentityNo=IdentityNo1 
                 AND clientNo=@clientNo
      )
THEN
              INSERT INTO table1 (Name,IdentityNO) VALUES (name,IdentityNO1);
              INSERT INTO table2 (Address,City) VALUES(address,city);
ELSE
              INSERT INTO tblexceptional(Name,Address,City,IdentityNo)
              VALUES(name,address,city,IdentityNo1);
END IF;


我建议对过程参数和变量名称使用一些前缀以避免歧义,例如使用p_对于参数和v_对于变量。看看这段代码,很难猜测哪个名称是列名、变量还是过程参数。这可能会导致错误和错误。

避免使用SELECT *- 如果有人更改表结构,此代码将失败。在游标声明中显式列出所需的列:

declare cur1 cursor for 
        select name,Address,City,IdentityNO,clientNo
        from temptable;

更正后的过程可能如下所示:

CREATE PROCEDURE `insertData`(In p_clientNo INT,In p_usedID INT)
BEGIN

declare v_name varchar(100);
declare v_address varchar(100);
declare v_city varchar(50);
declare v_IdentityNO varchar(20)
declare v_clientNo int


declare cur1 cursor for 
        select name,Address,City,IdentityNO,clientNo
        from temptable;
declare continue handler for not found set done=1;

    set done = 0;
    open cur1;
    igmLoop: loop
        fetch cur1 into v_name,v_Address,v_City,v_IdentityNO,v_clientNo;
        if done = 1 then leave igmLoop; end if;

        //If no record exists in some records table1,table2.
        IF  EXISTS(  SELECT 1 FROM table1 
                     WHERE IndentityNo = v_IdentityNo 
                       AND clientNo = v_clientNo)
              INSERT INTO table1 (Name,IdentityNO) VALUES (v_name,v_IdentityNO);
              INSERT INTO table2 (Address,City) VALUES(v_address,v_city);
        ELSE
              INSERT INTO tblexceptional(Name,Address,City,IdentityNo)
              VALUES(v_name,v_address,v_city,v_IdentityNo);
        END IF;
    end loop igmLoop;
    close cur1;
END
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql 带游标的存储过程 的相关文章

  • Java 从 SQL 数组获取 ResultSet 失败

    我试图从数据库中检索电子邮件地址 但没有成功 我的代码如下 Main System out println PortfolioData getEmails 58 So Far Returning null 投资组合数据 public sta
  • MySQL用户创建的临时表已满

    我使用内存引擎创建了一个临时表 如下所示 CREATE TEMPORARY TABLE IF NOT EXISTS some text id INT DEFAULT 0 string varchar 400 DEFAULT engine m
  • 如何使PHP中的激活链接过期?

    我有一个 php 脚本 它通过电子邮件向用户发送激活链接 以便他们可以激活他们的帐户 链接是这样的 mysite com activation phpid id 20 如何创建 24 小时后过期的链接 我还没有尝试过任何东西 因为我找不到任
  • 无法使用 Django 应用程序从容器连接到 MySQL docker 容器

    当我尝试从运行 Django 应用程序的 docker 容器连接到运行 MySQL 的容器时 出现以下错误 django db utils OperationalError 2003 Can t connect to MySQL serve
  • 在docker中使用MySQL数据库设置aspnetcore

    我正在尝试设置一个 docker compose 文件 其中包含 asp net core mysql 数据库和 phpmyadmin 的容器 设置我的 mysql 服务器没有问题 我可以使用 phpmyadmin 访问它 我的 asp n
  • 社交应用程序的数据库设计和优化注意事项

    通常的情况 我有一个简单的应用程序 允许人们上传照片并关注其他人 因此 每个用户都会有类似 墙 或 活动源 的东西 他或她可以在其中看到他 她的朋友 他或她关注的人 上传的最新照片 大多数功能都很容易实现 然而 当涉及到这个历史活动源时 由
  • ActiveRecord3死锁重试

    Rails 3 或 ActiveRecord 3 是否有任何插件可以复制旧版本死锁重试 http agilewebdevelopment com plugins deadlock retry插入 或者 该插件仍然适用于 Rails 3 吗
  • MySql 最后插入 ID,连接器 .net

    我正在使用 MySql Connector net 我需要获取最后一个查询生成的插入 id 现在 我假设返回值是MySqlHelper ExecuteNonQuery应该是最后一个插入id 但它只返回1 我正在使用的代码是 int inse
  • 使 pdo::query 静态

    当我运行下面的代码时出现此错误 我通常使用 msql 函数 但我尝试使用 PDO 代替 怎么了 致命错误 第 14 行无法静态调用非静态方法 PDO query
  • java mysql 准备好的语句

    我正在尝试使用 java 向数据库中进行简单的插入 它告诉我我的 sql 语法已关闭 但是 当我复制打印出来的字符串并将其放入 phpmyadmin 中的 sql 命令中时 它会正确执行该命令 并且我似乎无法弄清楚 java 中的字符串查询
  • PHP 绑定“bigint”数据类型(MySQLi 准备好的语句)

    studentId 57004542323382 companyOfferId 7 sql INSERT INTO studentPlacement companyOfferId studentId VALUES if stmt db gt
  • 当sql连接中存在两个同名列时,如何从一个表列中获取值

    当我连接两个具有相同名称列的表时 我目前面临着尝试获取值的问题 例如 table1 date和table2 date 每个表中的日期不同 我将如何获取 日期 本例中的表1 我目前正在跑步 while row mysqliquery gt f
  • 第三个下拉菜单不从数据库填充

    我有以下 Index php
  • 在 SQL Server 中处理日期

    我正在开发一个 ASP NET 网站 我从网页获取日期 然后根据用户输入我想从 SQL Server 数据库获取结果 使用存储过程 问题是我只能从用户界面获取这种格式的日期2016 10 08这是字符串类型 但在数据库中 我有一个类型为da
  • Mysql 检索所有有限制的行

    我想检索特定用户的所有行 限制为 0 x 所以我只是想问是否有任何方法可以检索 mysql 中的所有行 而不调用返回 x 的 count id 的方法 而不重载现有函数 该函数在查询中根本没有限制 与我们的 string Relace 功能
  • 如何在Sequelize中设置查询超时?

    我想看看如何在 Sequelize 中设置查询的超时时间 我查看了 Sequelize 文档以获取一些信息 但我找不到我要找的东西 我发现的最接近的是 pools acquire 选项 但我不想设置传入连接的超时 而是设置正在进行的查询的超
  • 如何在存储过程中实现 sql 搜索功能 (Sql Server 2008)

    我需要编写一个存储过程 该过程将使用 sql server 2008 根据可选参数搜索表 将会有两种模式 基本搜索模式 我们只传递一些文本 高级搜索模式 使用可选参数而不使用 SearchText 为了进行测试 我使用 AdventureW
  • 忽略重复条目并在 EF Core 中的 DbContext.SaveChanges() 上提交成功条目

    我有一个 ASP Net Core 2 2 Web API 在我的一个控制器操作中 我向 MySQL 数据库表添加了一堆行 我使用的是 Pomelo 例如 dbContext AddRange entities dbContext Save
  • 在 MySQL 中使用 COUNT 时如何返回 0 而不是 null

    我使用此查询返回存储在 sTable 中的歌曲列表以及存储在 sTable2 中的总项目数 SQL queries Get data to display sQuery SELECT SQL CALC FOUND ROWS str repl
  • MySQL 按重复项从上到下排序

    我有一个lammer问题 因为我不是mysql专业人士 我有类似的字段 id color 1 red 2 green 3 yellow 4 green 5 green 6 red 我想按重复项进行分组 最常见的重复项先进行分组 所以应该这样

随机推荐

  • 如何重新加载 JSF 使用的 ResourceBundles?

    我想通过单击按钮以编程方式重新加载 JSF 使用的 ResourceBundles 类路径中的 ResourceBundles 即 WEB INF classes 由外部应用程序修改 并且我知道修改事件 Try ResourceBundle
  • PHP中的矩阵乘法

    尽管矩阵的顺序应该没问题 但以下代码会抛出异常 这可能是一件我无法注意到的小事 但无法弄清楚
  • Python通过鼠标点击找到最近的乌龟

    我正在使用基于海龟的网格设置创建扫雷风格的游戏 我需要找到网格内最近的单元格并显示位于其下方的图标 无论是炸弹还是数字图标 我不想做到精确 我只需要单击鼠标即可找到网格中最近的单元格 即使单击不是直接在板上 目前 我的代码仅显示板上创建的最
  • 如何读取 Bash 中的任意一个键?

    我可以得到read n 1 KEY获取大多数键 但由多个字符表示的键除外 例如 如果我按向上箭头键 read n 1 echo A A As you can see read only takes the Esc and the A is
  • 使用 Python 加载 CloudFormation YAML

    我有一套YAML我最近转换的 AWS Cloudformation 模板JSON 使用时JSON我能够加载这些模板并使用它们进行转换jinja从中生成一些 Markdown 文档 我正在尝试做同样的事情YAML在Python中 我在 clo
  • 带回调的forceUpdate() 与 this.setState()

    原因是在处理时state具有自己功能的变量 我能想到的有两种方法 一是变异this state直接 嗯 有点 我知道这是不鼓励的 通过调用状态函数 然后调用forceUpdate 并处理由此带来的后果 另外就是做回调函数 哪个是正确的方法
  • Android:从顶部开始圆形进度条(270°)

    我使用以下可绘制对象定义了一个圆形进度条 ciruclar progress bar xml
  • 符合标准的方式来定义我的枚举

    在没有明确正确确定枚举范围的情况下 如何摆脱警告 符合标准的代码将与foo bar mUpload see here https stackoverflow com questions 514194 using enum inside ty
  • 值得学习使用 MSBuild 吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我只是想知道人们是否认为值得学习使用 MSBuild 语法来自定义 net 项目的构建过程 或者考虑到使用 Visual Studio 构建项目
  • 对 javascript 中的“this”关键字感到困惑

    我已经很长时间没有使用 Javascript 了 今天又重新学习了它 一直让我着迷的一件事是this关键词 我知道在 jQuery 事件处理程序中 例如单击事件 this指的是触发事件的元素 怎么this传递给我作为回调提供的函数 即使我的
  • 在 bash 调试运行期间隐藏信息

    我们在 shell 脚本中进行 debug run bash x my script sh 来了解 显示它正在做什么 但这样做可能会显示一些我不想看到的敏感信息 例如密码 我的脚本从安全保管库中提取密码 并在需要时将其作为脚本中的变量传递
  • 当用户在 scanf() 中输入错误的数据类型时如何修复无限循环?

    C初学者在这里 对于下面的程序 每当用户输入字符或字符串时 它就会进入无限循环 在仍然使用 scanf 的情况下如何解决这个问题 与使用 scanf 相比 编写该程序的更好方法是什么 感谢那些愿意回答的人 include
  • 在 MATLAB 中将频谱图保存为图像

    我正在使用以下方法分析一些声音片段spectrogram 函数于MATLAB 我想将频谱图保存为图像 jpg png 等 但无论我以什么图像格式保存图形 生成的图像总是与我在图中看到的不同 参差不齐 这是频谱图的示例 Matlab图 htt
  • 为什么我的基本 PyGame 模块这么慢?

    我计划在 Pygame 中编写代码 但我刚刚开始学习基础知识 发现执行代码非常慢 当我按下一个键时 它需要一段时间才能在终端中打印它 似乎没有任何模式 我正在运行Python 2 6 遇到这个问题后我降级了 通过进一步的测试我发现整个系统变
  • ProtoIninclude 添加了不需要的依赖项

    我刚刚在分布式缓存应用程序中用协议缓冲区替换了 NET 序列化 结果确实令人印象深刻 我唯一不喜欢的是 我需要在基本消息类及其子类之间添加依赖关系 这会创建循环依赖关系 除了用 ProtoInclude 标记基类之外 还有其他选择吗 In
  • C# 将文本文件分割成二维字符串数组

    我有一个如下所示的文本文件 John Gauthier blue May Henry Ford Red June James Bond Orange December 我想将它分成一个二维字符串数组 这样我就可以将每一行和每个单词分开 前任
  • 缓存失效——有通用的解决方案吗?

    计算机科学中只有两个难题 缓存失效和命名 菲尔 卡尔顿 是否有通用的解决方案或方法来使缓存失效 知道条目何时过时 以便保证您始终获得最新数据 例如 考虑一个函数getData 从文件中获取数据 它根据文件的上次修改时间对其进行缓存 每次调用
  • Rails、设计身份验证、CSRF 问题

    我正在使用 Rails 制作一个单页应用程序 登录和注销时 使用 ajax 调用 Devise 控制器 我遇到的问题是 当我 1 登录 2 注销然后再次登录时不起作用 我认为这与 CSRF 令牌有关 当我注销时 该令牌会被重置 尽管它不应该
  • symfony2 - 获取执行时间

    我想使用 symfony2 为我的应用程序制作一个状态页 我想在其中打印特定请求的执行时间 以及其他数据 无论如何我找不到这样做 我知道我可以通过以下方式跟踪代码部分的执行时间 starttime microtime do somethin
  • Mysql 带游标的存储过程

    Mysql游标问题 我编写了一个存储过程 它将从一个表中获取旅行记录并将其插入到 2 3 个不同的表中 使用插入语句 问题是我正在检查 table1 中是否不存在记录 然后我将记录从 temptable 顺序插入到 table1 table