2015-12-30 45 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謝謝 –