(3) IF ... THEN ... ELSEIF ... THEN ... ELSE ... END IF (可以有多个 ELSEIF)
IF ... THEN ... ELSEIF ... THEN ... ELSE ... END IF 语法中 ,如果 ELSEIF 后面省略 ELSE,直接用 END IF 结束,函数在调用时若条件落在 ELSE区间,调用不会报错,但返回结果为空。两个 CASE 语法中,如果省略 ELSE,直接用 END CASE 结束,函数在调用时若条件落在 ELSE 区间,函数将报错。
可以通过以下两个例子来进行验证:
IF ... THEN ... ELSEIF ... THEN ... ELSE ... END IF 的例子
CREATEOR REPLACE FUNCTION elseif_demo_(INnoint) RETURNSvarcharAS $$ DECLARE res varchar; BEGIN IF no<10THEN res:='no<10'; ELSEIF noBETWEEN10and100THEN res:='10<no<100'; END IF; RETURN res; END $$ LANGUAGE plpgsql;
CASE
(1) CASE ... WHEN ... THEN ... ELSE ... ENDCASE --when 表示 case 的多种情况,可以有多个 when ... then ...
CREATEOR REPLACE FUNCTION else_demo_(INnoint) RETURNSvarcharAS $$ DECLARE res varchar; BEGIN CASEWHENno<10THEN res:='no<10'; ENDCASE; RETURN res; END $$ LANGUAGE plpgsql;
CASE 两种用法的区别在于,CASE ... WHEN... 将判断语句拆成了两部分,WHEN 可以理解为一个等于号,只有 WHEN 右边的内容是可变的;CASE WHEN... 的判断语句在 WHEN 的右面,判断条件不限于一个属性。
可以通过下面的例子进行理解:
CREATEOR REPLACE FUNCTION case1_demo(INnoint) RETURNSvarcharAS $$ DECLARE res varchar; BEGIN CASEno WHEN1THEN res:='no=1'; WHEN2THEN res:='no=2'; ENDCASE; RETURN res; END $$ LANGUAGE plpgsql; CREATEOR REPLACE FUNCTION case2_demo(INnoint, name varchar) RETURNSvarcharAS $$ DECLARE res varchar; BEGIN CASE WHENno=1THEN res:='no=1'; WHEN name='aaa'THEN res:='no=2'; ENDCASE; RETURN res; END $$ LANGUAGE plpgsql;