MySQL 中嵌套循环中的多个游标

2024-01-02

我想做一些在 MySQL 中显得有点复杂的事情。 事实上,我希望打开一个游标,执行一个循环,并在这个循环中,使用上一个要执行的提取中的数据打开第二个游标,并重新循环结果。

  DECLARE idind INT;
  DECLARE idcrit INT;
  DECLARE idindid INT;
  DECLARE done INT DEFAULT 0;
  DECLARE done2 INT DEFAULT 0;
  DECLARE curIndicateur CURSOR FOR SELECT id_indicateur FROM indicateur;
  DECLARE curCritereIndicateur CURSOR FOR SELECT C.id_critere FROM critere C where C.id_indicateur=idind;
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

  set idindid=54;
  OPEN curIndicateur;
  REPEAT
    FETCH curIndicateur INTO idind;
    open curCritereIndicateur;
    REPEAT
      FETCH curIndicateur INTO idcrit;
      INSERT INTO SLA_DEMANDE_STATUS (iddemande,idindicateur,indicateur_status,progression) values('0009',idcrit,'OK',10.0);
    UNTIL done END REPEAT;
    close curCritereIndicateur;
  UNTIL done END REPEAT;
  CLOSE curIndicateur;

事实上,由于只能为 SQLSTATE 声明一个处理程序,因此如何对两个游标以不同的方式执行“直到完成”操作? 如果第一个结束,第二个也结束。


您需要在第一个游标循环内定义一个新的块,并在该块中使用不同的声明。

就像是:

BLOCK1: begin
    declare v_col1 int;                     
    declare no_more_rows boolean1 := FALSE;  
    declare cursor1 cursor for              
        select col1
        from   MyTable;
    declare continue handler for not found  
        set no_more_rows1 := TRUE;           
    open cursor1;
    LOOP1: loop
        fetch cursor1
        into  v_col1;
        if no_more_rows1 then
            close cursor1;
            leave LOOP1;
        end if;
        BLOCK2: begin
            declare v_col2 int;
            declare no_more_rows2 boolean := FALSE;
            declare cursor2 cursor for
                select col2
                from   MyOtherTable
                where  ref_id = v_col1;
           declare continue handler for not found
               set no_more_rows2 := TRUE;
            open cursor2;
            LOOP2: loop
                fetch cursor2
                into  v_col2;
                if no_more_rows then
                    close cursor2;
                    leave LOOP2;
                end if;
            end loop LOOP2;
        end BLOCK2;
    end loop LOOP1;
end BLOCK1;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL 中嵌套循环中的多个游标 的相关文章

  • 在docker中使用MySQL数据库设置aspnetcore

    我正在尝试设置一个 docker compose 文件 其中包含 asp net core mysql 数据库和 phpmyadmin 的容器 设置我的 mysql 服务器没有问题 我可以使用 phpmyadmin 访问它 我的 asp n
  • 通过连接从两个表中删除?

    我有两个表如下 tbl1 tbl2 id article id title image whole news tags author older datetime 其中 tbl1 id gt tbl2 article id 如何从两个表中删
  • MySQL 服务器未启动

    当我做 mysql u root p并输入my password这就是我得到的 错误 2002 HY000 无法通过套接字 var run mysqld mysqld sock 连接到本地 MySQL 服务器 2 所以我输入 systemc
  • mySQL MATCH 跨多个表

    我有一组 4 个表 我想对其进行搜索 每个都有全文索引 查询可以使用每个索引吗 CREATE TABLE categories id int 5 unsigned NOT NULL auto increment display order
  • MySQL 全文搜索不适用于某些单词,例如“house”

    我已经在 3 个字段中的一小部分记录上设置了全文索引 也尝试了 3 个字段的组合 并得到了相同的结果 有些单词返回结果很好 但某些单词如 house 和 澳大利亚 不这样做 有趣的是 澳大利亚 和 家乡 这样做 这似乎是奇怪的行为 如果我添
  • 使用按位函数查询 BIT 字段时,MySQL 不使用索引

    我的 MySQL 表中有一个 BIT 类型的字段 我想使用位值存储记录的状态 例如 1 status1 2 status2 4 status3 8 status4 每条记录可以同时具有多种状态 对于 status1 和 status3 该值
  • 显示表 FULLTEXT 索引列

    我希望运行一个查询 该查询将返回表中全文索引的列列表 该表采用 MyISAM 格式 我将使用 php 来构建查询 理想情况下 我会运行查询 它会返回信息 以便我可以构造一个以逗号分隔的列字符串 例如 名 姓 电子邮箱 这在 MySQL 中可
  • 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
  • 如何在Mysql中仅将不同的值从一个表复制到另一个表?

    我有一个大约 2 5GB 的 MySql 数据库 表 A 具有以下列 anoid query date item rank url 我刚刚创建了另一个仅包含列的表 b query and date 我想在查询列中插入所有不同的记录 及其各自
  • InnoDB 因读未提交而死锁! - Java - Glassfish - EJB3(JPA/Hibernate)

    几天来 我在使用 Glassfish EJB3 和 Mysql InnoDB 的 Java 应用程序上遇到了死锁问题 配置 Mysql InnoDB Ver 14 12 Distrib 5 0 51a 适用于 debian linux gn
  • 如何在Sequelize中设置查询超时?

    我想看看如何在 Sequelize 中设置查询的超时时间 我查看了 Sequelize 文档以获取一些信息 但我找不到我要找的东西 我发现的最接近的是 pools acquire 选项 但我不想设置传入连接的超时 而是设置正在进行的查询的超
  • 如何使用 vitess 仅对特定表进行分片

    我创建了一个包含三个表的未分片键空间 现在我想对前两个表的键空间进行分片 但不想对第三个表进行分片 如何才能做到这一点 Vitess 文档不包含任何与此相关的信息或示例 请帮忙 Thanks vitess 中的垂直分片与水平分片类似 您应该
  • MySQL连接字符集问题

    我在 Mac 上使用带有 MySQL 的 velosurf 没有任何编码问题 但是当我切换到 Linux 计算机时 从 velosurf 获得的值未正确编码 我发现这可能是默认连接字符集的问题 在 Mac 上我得到 mysql gt sho
  • MySQL 查询到 CSV [重复]

    这个问题在这里已经有答案了 有没有一种简单的方法来运行MySQL查询来自linux命令行并以csv格式输出结果 这就是我现在正在做的事情 mysql u uid ppwd D dbname lt lt EOQ sed e s g tee l
  • PDO PHP 连接,致命错误

    我的连接类 firstcode php class DB functions public db function construct try db new PDO mysql localhost dbname xxx charset ut
  • 如何使用 Perl 更改 mysql 密码

    我需要使用 Perl 脚本更改一些 mysql 密码 以下内容在更改数据库条目时有效 但是当我针对 mysql 用户更改修改它时 它将它们重置为空白密码 最后 刷新权限 也很好 但我还没有找到方法 usr bin perl use DBI
  • 在 PHP 字符串中格式化 MySQL 代码

    是否有任何程序 IDE 可以在 PHP 字符串中格式化 MySQL 代码 例如 我使用 PHPStorm IDE 但它无法做到这一点 它对 PHP 和 MYSQL 执行此操作 但不适用于 php 字符串内的 MYSQL 我已准备好使用新的
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen

随机推荐

  • 从 npm 本地导入 ES 模块依赖项,无需捆绑/转译第一方源代码

    背景 我正在尝试创建一个 没有建造的 https www pika dev blog pika web a future without webpack JavaScript 应用程序 我不需要watch每次我保存任何源文件时 都会运行任务
  • 计算 pyspark 数据帧的百分比

    我有一个来自泰坦尼克号数据的 pyspark 数据框 我已将其副本粘贴在下面 如何添加包含每个存储桶百分比的列 谢谢您的帮助 首先是一个包含输入数据的文字 DataFrame import findspark findspark init
  • 环境变量更改project.json中的应用程序名称并设置运行时变量?

    我需要从相同的代码库生成两个应用程序 例如 pro 和 lite 版本 这里有很多关于此的问题 但我发现没有一个涉及node or electron 我只用过env以非常简单的方式进行开发 经过搜索后 我没有看到任何提到能够在已部署的应用程
  • 使用python从IB api获取外汇汇率

    我正在尝试使用 ibpy 库从交互式经纪商获取货币汇率 我在谷歌上找到了代码 我做了一些更改 from ib ext Contract import Contract from ib opt import ibConnection mess
  • 相对布局 - CenterInParent 和 marginTop

    我有以下 XML
  • 单击按钮后开始倒计时

    我正在创建一个带有计时器倒计时的儿童游戏 该游戏在用户单击按钮后开始 我正在使用的代码可以毫无问题地启动倒计时 但我希望倒计时仅在单击按钮后才开始 这是我的代码 window onload function function var cou
  • 触发 valueChange 与初始化值 - angular2

    我正在编写一个 angular2 应用程序 但我遇到了一些问题 首先 我有一个绑定到的选择formControl export class MyComponent implements OnInit profilesBy Observabl
  • 如何从 Java 运行 UNIX 终端并向其发送命令?

    关于主题 代码如下 Process proc null try String cmdss gnome terminal proc Runtime getRuntime exec cmdss null wd catch IOException
  • 防止iOS接近传感器使屏幕变黑

    我已经看到这个问题被问了几次 但没有人回答它 事实上这可能是不可能的 但我想知道是否有一种方法可以防止 iPhone 上的邻近状态发生变化时屏幕变黑 我已经实现了一种方法 可以在接近状态发生变化时执行某些操作 但屏幕会闪烁为黑色 我想避免这
  • Visual Studio 2013 中的自定义脚手架模板

    以前 使用 Visual Studio 2012 我能够将CodeTemplates文件夹到我的项目目录然后修改现有的T4 templates或者添加全新的 T4 模板来满足我特定的代码生成要求 前面描述的方法似乎不再适用于 Visual
  • numpy apply_along_axis 一维数组

    当 numpy apply along axis 采用一维数组作为输入时会发生什么 当我在一维数组上使用它时 我看到一些奇怪的东西 y array 1 2 3 4 第一次尝试 apply along axis lambda x x gt 2
  • AngularJs - RXJS 可观察取消订阅

    我已经设置了 RXJS 可观察的 我有两个组件订阅服务工厂中的一个主题 如何取消订阅选定组件的主题 以便按下按钮即可停止收听主题广播 看我的jsfiddle取消订阅应用程序 https jsfiddle net bkarv 0maek0qr
  • stdcall 可以有可变参数吗?

    据我所知 只有 caller clean stack 约定可以使用变量参数 顺便说一句 WinApi StringCchPrintfW 是这样声明的 我删除了 SAL 内联 HRESULT stdcall字符串CchPrintfW STRS
  • WidgetKit(意图)-如何链接从远程获取的多个动态意图?

    我正在为我的应用程序创建一个小部件 并使用从 API 获得的动态数据成功添加意图配置 此代码片段获取列表并将其返回到 Intent func provideLeagueOptionsCollection for intent LeagueC
  • 我可以注释“fun”声明的完整类型吗?

    在学习环境中 我可以选择哪些选项来为函数提供类型签名 标准 ML 没有像 Haskell 那样的顶级类型签名 以下是我考虑过的替代方案 模块签名 需要单独的签名文件 或者在与模块本身相同的文件内的单独块中定义的类型签名 这需要使用模块 在任
  • jquery 没有父级的子选择器

    我正在查看创建轮播菜单的教程中的一些代码 并注意到没有父项的父子选择器 以前从未见过这个 并且对它实际在做什么感到困惑 参见下面的代码 var wrapper gt div this css overflow hidden slider w
  • 生成最近两周的日期范围?

    我想生成 2 个 DATETIME 代表从星期日到星期六 2x 的最近两周 它不应该包括当前不完整的一周 感谢你的帮助 一些可以工作的东西 利用美妙的DateTime课程
  • Flutter上如何用pop获取返回值?

    我想知道如何在 Flutter 上使用 pop 获取两个值 我尝试编写代码 但我得到了异常 必须向文本小部件提供非空字符串 这是代码 第一屏 ElevatedButton child const Text move to second sc
  • Powershell 将数据传输到外部控制台应用程序

    我有一个可以接受标准输入的控制台应用程序 它缓冲数据直到执行命令 此时它会执行所有数据 并将输出发送到标准输出 目前 我正在从 Powershell 运行该应用程序 将命令通过管道传输到其中 然后解析输出 传入的数据相对较小 然而 该应用程
  • MySQL 中嵌套循环中的多个游标

    我想做一些在 MySQL 中显得有点复杂的事情 事实上 我希望打开一个游标 执行一个循环 并在这个循环中 使用上一个要执行的提取中的数据打开第二个游标 并重新循环结果 DECLARE idind INT DECLARE idcrit INT