CASOCASO
CASE search-expression WHEN expression_1 [, expression_2, ...] THEN when-statements [ ... ] [ELSE else-statements ] END CASE;
La expresión-búsqueda es una expresión que se evaluará con la expresión en cada rama WHEN usando el operando de igualdad (=). Si se encuentra una coincidencia, se ejecutan las sentencias when en la rama WHEN correspondiente. Las expresiones subsiguientes debajo no serán evaluadas.
Las sentencias else en la rama ELSE se ejecutan si no se encuentran coincidencias. La rama ELSE es opcional. Si no se encuentra ninguna coincidencia y no hay una rama ELSE, PostgreSQL generará la excepción CASE_NOT_FOUND .
Veamos algunos ejemplos en nuestra base de datos de ejemplo de dvdrental .
Ejemplo:
Aquí vamos a get_price_segment p_film_id
CREATE OR REPLACE FUNCTION get_price_segment(p_film_id integer) RETURNS VARCHAR(50) AS $$ DECLARE rate NUMERIC; price_segment VARCHAR(50); BEGIN -- get the rate based on film_id SELECT INTO rate rental_rate FROM film WHERE film_id = p_film_id; CASE rate WHEN 0.99 THEN price_segment = 'Mass'; WHEN 2.99 THEN price_segment = 'Mainstream'; WHEN 4.99 THEN price_segment = 'High End'; ELSE price_segment = 'Unspecified'; END CASE; RETURN price_segment; END; $$ LANGUAGE plpgsql;
Ahora get_price_segment()
SELECT get_price_segment(123) AS "Price Segment";
Producción:
Sentencia CASE buscada
Syntax: CASE WHEN boolean-expression-1 THEN statements [ WHEN boolean-expression-2 THEN statements ... ] [ ELSE statements ] END CASE;
La sentencia CASE buscada ejecuta sentencias basadas en el resultado de las expresiones booleanas en cada cláusula WHEN. PostgreSQL evalúa las expresiones booleanas secuencialmente de arriba a abajo hasta que una expresión es verdadera. Luego, la evaluación se detiene y se ejecuta la sentencia correspondiente. El control se pasa a la siguiente declaración después de END CASE.
En caso de que no se encuentre un resultado verdadero, se ejecutan las declaraciones en la cláusula ELSE. La cláusula ELSE es opcional. Si omite la cláusula ELSE y no hay un resultado verdadero, PostgreSQL generará la excepción CASE_NOT_FOUND .
Ejemplo:
get_customer_service p_customer_id pagoCASE
CREATE OR REPLACE FUNCTION get_customer_service (p_customer_id INTEGER) RETURNS VARCHAR (25) AS $$ DECLARE total_payment NUMERIC ; service_level VARCHAR (25) ; BEGIN -- get the rate based on film_id SELECT INTO total_payment SUM (amount) FROM payment WHERE customer_id = p_customer_id ; CASE WHEN total_payment > 200 THEN service_level = 'Platinum' ; WHEN total_payment > 100 THEN service_level = 'Gold' ; ELSE service_level = 'Silver' ; END CASE ; RETURN service_level ; END ; $$ LANGUAGE plpgsql;
Ahora probemos la función anterior usando la siguiente declaración:
SELECT 148 AS customer, get_customer_service (148) UNION SELECT 178 AS customer, get_customer_service (178) UNION SELECT 81 AS customer, get_customer_service (81);
Producción:
Publicación traducida automáticamente
Artículo escrito por RajuKumar19 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA