我有一个PostgreSQL函数
CREATE OR REPLACE FUNCTION increment(i integer) RETURNS integer AS $$
BEGIN
IF i<0 THEN
RETURN i + 1;
ELSE
GOTO label1;
END IF
<<label1>>
RETURN null;
END;
$$ LANGUAGE plpgsql;
在这个函数中,我必须GOTO到label1,但是GOTO关键字不起作用,请你帮助我找到从特定代码跳转到标签的方式。
答案 0 :(得分:4)
解决方法:
<<label>>
LOOP
...
EXIT label WHEN i > 0;
...
EXIT;
END LOOP label;
some;
但我十年都没用 - 所以通常你做错了
答案 1 :(得分:1)
PL / PgSQL没有GOTO操作符。
但是,你为什么需要转到?在您的情况下,您可以简单地删除ELSE并获取您正在寻找的行为。
答案 2 :(得分:1)
您不需要GOTO
。
DECLARE
一个布尔变量。根据您是否要执行下一个块来设置其值。在测试变量的IF
中包裹该块。魔术,它被跳过了!
我假设您的代码已被删减和简化,因为否则它没有任何意义。这是一种方法,假设你不能只删除“ELSE ... GOTO”并让控制流动。
CREATE OR REPLACE FUNCTION increment(i integer) RETURNS integer AS $$
DECLARE
run_condition boolean = 't';
BEGIN
IF i<0 THEN
RETURN i + 1;
ELSE
run_condition = 'f';
END IF;
IF run_condition THEN
-- Do the optional thing
END;
RETURN null;
END;
$$ LANGUAGE plpgsql;
答案 3 :(得分:0)
另一个嵌套的Begin块?
BEGIN
<<label1>>
BEGIN
IF i<0 THEN
RETURN i + 1;
ELSE
EXIT label1;
END IF;
END;
RETURN null;
END;