如何在Postgres中使用ELSIF语句

12B*_*B01 4 postgresql if-statement

我想知道我是否可以单独运行 if 语句,或者它不能独立运行,必须位于嵌套语句中。我无法直接运行以下代码。

IF tax_year=2005 THEN
UPDATE table1 SET column1=column1*3;
ELSIF tax_year=2006 THEN
UPDATE table1 SET column1=column1*5;
ELSIF tax_year=2007 THEN
UPDATE table1 SET column1=column1*7;
END IF;
Run Code Online (Sandbox Code Playgroud)

另外,我没有写出当tax_year=2008时,column1=column1。我不确定它是否需要在代码中,因为 2008 年 column1 不会改变。

感谢您的帮助!

Eri*_*ang 5

IF / ELSIF / ELSE是 的一部分PL/pgsql,它是 pg 的扩展,默认情况下为新数据库启用。

您可以创建一个函数来包装IF语句。并调用函数来执行这些语句。

例如

-- create function,
CREATE OR REPLACE FUNCTION fun_dummy_tmp(id_start integer, id_end integer) RETURNS setof dummy AS $$
DECLARE
BEGIN
    IF id_start <= 0 THEN
        id_start = 1;
    END IF;

    IF id_end < id_start THEN
        id_end = id_start;
    END IF;

    return query execute 'select * from dummy where id between $1 and $2' using id_start,id_end;

    return;
END;
$$ LANGUAGE plpgsql;

-- call function,
select * from fun_dummy_tmp(1, 4);

-- drop function,
DROP FUNCTION IF EXISTS fun_dummy_tmp(integer, integer);
Run Code Online (Sandbox Code Playgroud)

并且,有一个CASE声明,这可能是满足您的要求的更好选择。

例如

-- create function,
CREATE OR REPLACE FUNCTION fun_dummy_tmp(id integer) RETURNS varchar AS $$
DECLARE
    msg varchar;
BEGIN
    CASE id%2
        WHEN 0 THEN
            msg := 'even';

        WHEN 1 THEN
            msg := 'odd';
        ELSE
            msg := 'impossible';
    END CASE;

    return msg;
END;
$$ LANGUAGE plpgsql;

-- call function,
select * from fun_dummy_tmp(6);

-- drop function,
DROP FUNCTION IF EXISTS fun_dummy_tmp(integer);
Run Code Online (Sandbox Code Playgroud)

具体控制语句可以参考postgresql文档。