2015-12-30 26 views
1

我有一个触发器功能。 我想检查是否有status是(5,6,4,7)plpgsql函数。如何比较值与一组值?

CREATE OR REPLACE FUNCTION a() 
    RETURNS trigger AS 
$BODY$ 
begin 
    if old.status = (5,6,4,7) then 
     do something. 
    end if; 
    return old; 
end; 
$BODY$ 
    LANGUAGE plpgsql VOLATILE 

我如何将其更改为正确的语法吗?

回答

4

使用IN操作:

... 
if old.status IN (5,6,4,7) then 
    do something. 
end if; 
... 
+0

是不是在查询的操作?这不是一个查询。 – java

+0

@java'IN'将与'IF'和查询一起工作。 – lad2025

+2

不知道你为什么链接到Oracle ...大声笑。如果这不是你想要的,则会回滚。 @java在PostgreSQL的SQL中有效的大多数表达式在PL/pgSQL中也是有效的。 – jpmc26

0

这是reference of this link

只在PostgreSQL 9.x的工作

CREATE OR REPLACE FUNCTION a() 
    RETURNS trigger AS 
$BODY$ 
begin 
    if old.status = ANY (VALUES (5),(6),(4),(7))) then 
     do something. 
    end if; 
    return old; 
end; 
$BODY$ 
    LANGUAGE plpgsql VOLATILE 
+2

使用'IN'是一种更好的(在我看来更易读)解决方案。另外,您不需要为每个值重复'values'子句:'= any(values(4),(5),(6),(7))'就可以正常工作。 –

+0

@a_horse_with_no_name谢谢 –