能否在PostgreSQL中使用标签实现goto跳转功能?
在PL/pgSQL中跳转到标签的正确方式
嘿,我看你在尝试让PL/pgSQL函数的控制流跳转到指定标签,思路是对的,但写法出错啦——PL/pgSQL里不能直接通过写标签名来跳转,得用GOTO语句才能实现这个需求。
先说说你原代码的问题:你在ELSE分支里写的label1;是无效语法,编译器会把它当成不存在的函数或变量处理,肯定会报错。
修正后的代码
只需要把label1;替换成GOTO label1;,就能实现你想要的跳转效果:
CREATE OR REPLACE FUNCTION sample(i integer) RETURNS integer AS $$ BEGIN IF i < 0 THEN RETURN i + 1; ELSE GOTO label1; -- 用GOTO语句跳转到指定标签 END IF; <<label1>> RETURN null; END; $$ LANGUAGE plpgsql;
关于PL/pgSQL中GOTO的小提醒
GOTO只能跳转到当前块或外层块定义的标签,不能跳转到内层块(比如循环内部的标签),更不能跨函数跳转。- 尽量别过度依赖
GOTO,它容易让代码逻辑变得混乱,后期维护起来头疼。像你这个例子其实可以简化,完全不用标签和GOTO:
CREATE OR REPLACE FUNCTION sample(i integer) RETURNS integer AS $$ BEGIN IF i < 0 THEN RETURN i + 1; END IF; RETURN null; -- 直接走到这里,逻辑更直观 END; $$ LANGUAGE plpgsql;
这样代码可读性更高,也更符合PL/pgSQL的常规写法。
内容的提问来源于stack exchange,提问作者rshiny
相关产品推荐
相关产品推荐

