Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql “处的语法错误”;端环&引用;plpgsql中WHILE循环的一部分_Postgresql_Plpgsql_Postgresql 9.6 - Fatal编程技术网

Postgresql “处的语法错误”;端环&引用;plpgsql中WHILE循环的一部分

Postgresql “处的语法错误”;端环&引用;plpgsql中WHILE循环的一部分,postgresql,plpgsql,postgresql-9.6,Postgresql,Plpgsql,Postgresql 9.6,尝试在plpgsql中定义无法解释的函数时,我遇到语法错误。由于某些原因,此代码将始终失败,或“循环”出现语法错误。: 代码成功执行一次,但在第二次执行时立即失败,并出现相同的错误 我对此完全感到困惑。我已经一次注释掉了每个块,以及试图找到问题的各行,我在任何地方都找不到语法错误,但它一直在抱怨 我使用的是postgresql 9.6。如果要获得单个if语句,请使用ELSIF: IF dev < 0 THEN /* Current area is smaller than desi

尝试在plpgsql中定义无法解释的函数时,我遇到语法错误。由于某些原因,此代码将始终失败,或“循环”出现语法错误。:

代码成功执行一次,但在第二次执行时立即失败,并出现相同的错误

我对此完全感到困惑。我已经一次注释掉了每个块,以及试图找到问题的各行,我在任何地方都找不到语法错误,但它一直在抱怨


我使用的是postgresql 9.6。

如果要获得单个
if
语句,请使用
ELSIF

    IF dev < 0 THEN /* Current area is smaller than desired area, increase the buffer distance by the step. */
        guess = guess + step;
    ELSIF dev > 0 THEN /* Current area is larger than desired area, decrease the buffer distance by the step. */
        guess = guess - step;
    ELSE /* Technically shouldn't ever happen because then ABS(dev) is indeed lesser than tol but here just in case. */
        EXIT;
    END IF;
如果dev<0,则/*当前区域小于所需区域,按步骤增加缓冲区距离*/
猜=猜+步;
如果dev>0,则/*当前区域大于所需区域,则按步长减小缓冲区距离*/
猜测=猜测-步骤;
ELSE/*技术上不应该发生,因为当时ABS(dev)确实比tol小,但这里只是以防万一*/
出口
如果结束;

结束循环
之前,阅读有关的文档,您误用了
结束IF
。见简化和预期:

    IF dev < 0 THEN
        guess = guess + step;
    ELSE 
        IF dev > 0 THEN
            guess = guess - step;
        ELSE
            EXIT;
        END IF;
    END IF; -- this is missing
如果dev<0,则
猜=猜+步;
其他的
如果dev>0,则
猜测=猜测-步骤;
其他的
出口
如果结束;
如果结束;——这个不见了

从技术上讲,这是可行的,但问题是当我打算写
ELSIF
时,我正在写
ELSIF
    IF dev < 0 THEN /* Current area is smaller than desired area, increase the buffer distance by the step. */
        guess = guess + step;
    ELSIF dev > 0 THEN /* Current area is larger than desired area, decrease the buffer distance by the step. */
        guess = guess - step;
    ELSE /* Technically shouldn't ever happen because then ABS(dev) is indeed lesser than tol but here just in case. */
        EXIT;
    END IF;
    IF dev < 0 THEN
        guess = guess + step;
    ELSE 
        IF dev > 0 THEN
            guess = guess - step;
        ELSE
            EXIT;
        END IF;
    END IF; -- this is missing