MySql 过程 GOTO 语句

Posted

技术标签:

【中文标题】MySql 过程 GOTO 语句【英文标题】:MySql Procedure GOTO Statement 【发布时间】:2015-05-19 07:35:40 【问题描述】:

我想在 mysql 存储过程中使用 goto 语句,只要条件再次变为真,我就会执行我的游标。

这只是一个示例代码,我只是在寻找 goto 语句

BLOCK_BACKLOG:begin
    declare backlgId, oldCOR, oldATR,oldCourse,oldATR,isFormFilled,nextParentId int;
    declare backlogNoMoreRow boolean default false;

Label : TestLineStart
    declare backlogCur cursor for select bcklg.id,cor.id,atr.id,cr.id,atr.obtainedMarks,atr.isFormFilled,atr.parentRegistration_id 
                from train bcklg,bus cor,fliet atr,fair co,distance cr 
                where bcklg.courseofferingregistration_id=cor.id and cor.academictermregistration_id=atr.id and cor.courseoffering_id=co.id and co.course_id=cr.id
                and bcklg.isDeleted is false and atr.id=parentId;
    declare continue handler for not found set backlogNoMoreRow=true;

    open backlogCur;

    LOOP_BACKLOG: loop
        fetch backlogCur into backlgId, oldCOR, oldATR,oldCourse,oldATRMarks,isFormFilled,nextParentId;                             

        if backlogNoMoreRow then
                close backlogCur;
                leave LOOP_BACKLOG;
        end if;

           if isFormFilled==0 then
        parentId=nextParentId;
        GOTO TestLineStart;
        end if;

【问题讨论】:

可能重复***.com/questions/11134300/… 是的,可能会重复,但我想知道当条件变为真时是否可以再执行一次 courser。如果 goto 在 mysql 中不起作用,那么次要方式是什么 【参考方案1】:

您可以根据变量isFormFilled 的值在外部块上使用LOOP

跟随变化可能会对您有所帮助。

-- Label : TestLineStart
TestLineStart: LOOP
-- other part of your SP as it is

并进行以下更改:

if isFormFilled==0 then
    parentId=nextParentId;
    -- GOTO TestLineStart;
else
    leave TestLineStart;
end if;

您必须正确关闭所有loop 语句。

【讨论】:

以上是关于MySql 过程 GOTO 语句的主要内容,如果未能解决你的问题,请参考以下文章

excel中的goto

Goto语句

Sql - goto 语句

go语言学习笔记 — 基础 — 控制流:goto跳转语句

MySQL存储过程中的3种循环

break continue goto