-- 1. написать функцию, считающую куб целого числа на языке SQL, при этом при значении 0 и меньше функция должна вернуть 0
-- https://www.postgresql.org/docs/current/functions-conditional.html
CREATE OR REPLACE FUNCTION kube(int) RETURNS int AS $$
SELECT CASE WHEN $1>0 THEN $1*$1*$1 ELSE 0 END;
$$ IMMUTABLE
LANGUAGE SQL;
SELECT kube(10);
SELECT kube(-10);
-- 2. написать функцию, считающую куб целого числа на языке pl/pgSQL, при этом при значении 0 и меньше функция должна вернуть 0
CREATE OR REPLACE FUNCTION kube2(int) RETURNS int AS $$
BEGIN
CASE
WHEN $1>0
THEN RETURN $1*$1*$1;
ELSE
RETURN 0;
END CASE;
END;
$$ IMMUTABLE
LANGUAGE PLPGSQL;
SELECT kube2(10);
SELECT kube2(-10);
-- 3. написать процедуру, считающую куб целого числа на языке pl/pgSQL, при этом при значении 0 и меньше процедура должна вернуть 0
CREATE OR REPLACE PROCEDURE kube3(INOUT i int) AS $$
BEGIN
CASE
WHEN i>0
THEN i = i*i*i;
ELSE
i = 0;
END CASE;
END;
$$ LANGUAGE PLPGSQL;
CALL kube3(10);
CALL kube3(-10);
* написать триггер на изменение данных для таблицы, в которой есть два текстовых поля - одно регистрозависимое,
второе поле мы заполняем маленькими буквами для организации регистронезависимого поиска через LIKE
drop TABLE if test_like;
CREATE TABLE test_like (
txt text,
txt_lower text
);
-- создаем триггерную функцию
CREATE or replace FUNCTION tr_test_like() RETURNS trigger AS $tr_test_like$
BEGIN
new.txt_lower := lower(new.txt);
RETURN new;
END;
$tr_test_like$
LANGUAGE plpgsql;
-- создаем триггер на основе триггерной функции
CREATE TRIGGER tr_test_like BEFORE INSERT OR UPDATE
ON test_like FOR EACH ROW EXECUTE FUNCTION tr_test_like();
INSERT INTO test_like(txt) VALUES ('IvAn');
SELECT * FROM test_like;
SELECT * FROM test_like WHERE txt like '%ivan%';
SELECT * FROM test_like WHERE txt_lower like '%ivan%';