-- However we do not currently suppress folding of potentially -- reachable subexpressions SELECTCASEWHEN i > 100THEN1/0ELSE0 END FROM case_tbl;
-- Test for cases involving untyped literals in test expression SELECTCASE'a'WHEN'a'THEN1ELSE2 END;
-- -- Examples of targets involving tables --
SELECT CASE WHEN i >= 3THEN i
END AS">= 3 or Null" FROM CASE_TBL;
SELECT CASEWHEN i >= 3THEN (i + i) ELSE i
END AS"Simplest Math" FROM CASE_TBL;
SELECT i AS"Value", CASEWHEN (i < 0) THEN'small' WHEN (i = 0) THEN'zero' WHEN (i = 1) THEN'one' WHEN (i = 2) THEN'two' ELSE'big'
END AS"Category" FROM CASE_TBL;
SELECT CASEWHEN ((i < 0) or (i < 0)) THEN'small' WHEN ((i = 0) or (i = 0)) THEN'zero' WHEN ((i = 1) or (i = 1)) THEN'one' WHEN ((i = 2) or (i = 2)) THEN'two' ELSE'big'
END AS"Category" FROM CASE_TBL;
-- -- Examples of qualifications involving tables --
-- -- NULLIF() and COALESCE() -- Shorthand forms for typical CASE constructs -- defined in the SQL standard. --
SELECT * FROM CASE_TBL WHERE COALESCE(f,i) = 4;
SELECT * FROM CASE_TBL WHERE NULLIF(f,i) = 2;
SELECT COALESCE(a.f, b.i, b.j) FROM CASE_TBL a, CASE2_TBL b;
SELECT * FROM CASE_TBL a, CASE2_TBL b WHERE COALESCE(a.f, b.i, b.j) = 2;
SELECT NULLIF(a.i,b.i) AS"NULLIF(a.i,b.i)",
NULLIF(b.i, 4) AS"NULLIF(b.i,4)" FROM CASE_TBL a, CASE2_TBL b;
SELECT * FROM CASE_TBL a, CASE2_TBL b WHERE COALESCE(f,b.i) = 2;
-- Tests for constant subexpression simplification
explain (costs off) SELECT * FROM CASE_TBL WHERE NULLIF(1, 2) = 2;
explain (costs off) SELECT * FROM CASE_TBL WHERE NULLIF(1, 1) ISNOTNULL;
explain (costs off) SELECT * FROM CASE_TBL WHERE NULLIF(1, null) = 2;
-- -- Examples of updates involving tables --
UPDATE CASE_TBL SET i = CASEWHEN i >= 3THEN (- i) ELSE (2 * i) END;
SELECT * FROM CASE_TBL;
UPDATE CASE_TBL SET i = CASEWHEN i >= 2THEN (2 * i) ELSE (3 * i) END;
SELECT * FROM CASE_TBL;
UPDATE CASE_TBL SET i = CASEWHEN b.i >= 2THEN (2 * j) ELSE (3 * j) END FROM CASE2_TBL b WHERE j = -CASE_TBL.i;
SELECT * FROM CASE_TBL;
-- -- Nested CASE expressions --
-- This test exercises a bug caused by aliasing econtext->caseValue_isNull -- with the isNull argument of the inner CASE's CaseExpr evaluation. After -- evaluating the vol(null) expression in the inner CASE's second WHEN-clause, -- the isNull flag for the case test value incorrectly became true, causing -- the third WHEN-clause not to match. The volatile function calls are needed -- to prevent constant-folding in the planner, which would hide the bug.
-- Wrap this in a single transaction so the transient '=' operator doesn't -- cause problems in concurrent sessions
BEGIN;
CREATE FUNCTION vol(text) returns text as 'begin return $1; end' language plpgsql volatile;
SELECTCASE
(CASE vol('bar') WHEN'foo'THEN'it was foo!' WHEN vol(null) THEN'null input' WHEN'bar'THEN'it was bar!' END
) WHEN'it was foo!'THEN'foo recognized' WHEN'it was bar!'THEN'bar recognized' ELSE'unrecognized' END;
-- In this case, we can't inline the SQL function without confusing things. CREATE DOMAIN foodomain AS text;
CREATE FUNCTION volfoo(text) returns foodomain as 'begin return $1::foodomain; end' language plpgsql volatile;
CREATE FUNCTION inline_eq(foodomain, foodomain) returns boolean as 'SELECT CASE $2::text WHEN $1::text THEN true ELSE false END' language sql;
SELECTCASE volfoo('bar') WHEN'foo'::foodomain THEN'is foo'ELSE'is not foo' END;
ROLLBACK;
-- Test multiple evaluation of a CASE arg that is a read/write object (#14472) -- Wrap this in a single transaction so the transient '=' operator doesn't -- cause problems in concurrent sessions
BEGIN;
CREATE DOMAIN arrdomain ASint[];
CREATE FUNCTION make_ad(int,int) returns arrdomain as 'declare x arrdomain;
begin
x := array[$1,$2]; return x;
end' language plpgsql volatile;
CREATE FUNCTION ad_eq(arrdomain, arrdomain) returns boolean as 'begin return array_eq($1, $2); end' language plpgsql;
SELECTCASE make_ad(1,2) WHEN array[2,4]::arrdomain THEN'wrong' WHEN array[2,5]::arrdomain THEN'still wrong' WHEN array[1,2]::arrdomain THEN'right'
END;
-- While we're here, also test handling of a NULLIF arg that is a read/write -- object (bug #18722)
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.11Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-08-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.