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 不会改变。
感谢您的帮助!
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文档。