SQLize Online / PHPize Online  /  SQLtest Online

A A A
Share      Blog   Popular
Copy Format Clear
--1. Требуется написать функцию, которая будет выводить на экран фразу «Hello, World!». create function welcome() RETURNS TEXT AS $$ DECLARE str TEXT := 'Hello world!'; BEGIN RETURN str; END; $$ LANGUAGE plpgsql; select welcome(); --2. Требуется написать функцию, которая будет переворачивать строку, получаемую на вход; create function revers(str TEXT) RETURNS TEXT AS $$ DECLARE strr TEXT := ''; i int; BEGIN FOR i in 1..length(str) LOOP strr = substr(str,i,1) || strr; END LOOP; RETURN strr; END; $$ LANGUAGE plpgsql; select revers('abac'); --3. Требуется написать функцию, которая будет рассчитывать факториал заданного числа; create function fact(n int) RETURNS TEXT AS $$ DECLARE i int; res int := 1; BEGIN FOR i in 1..n LOOP res = res * i; END LOOP; RETURN res; END; $$ LANGUAGE plpgsql; select fact(5); --4. Требуется написать функцию, которая будет прибавлять к дате в формате ‘YYYY-MM-DD’ n дней; create function fact(dat date, n int) RETURNS TEXT AS $$ BEGIN RETURN dat + n; END; $$ LANGUAGE plpgsql; select fact('2022-04-07', 10); --5. Требуется написать код, который создаст копии всех имеющихся таблиц вашей БД какой-либо схемы, --например, добавив к ним суффикс ‘copy’. --Триггеры /*DO $$ DECLARE sch varchar(60) := 'computers'; t record; tbl varchar(32000) := ''; BEGIN FOR t IN SELECT table_name, table_schema FROM information_schema.tables WHERE table_schema = sch LOOP tbl:= t.table_schema '.' t.table_name || '_copy2'; EXECUTE ('create table ' tbl ' as select * from ' sch '.' || t.table_name); END LOOP; END; $$ LANGUAGE plpgsql; */ create table emp ( empname text, salary integer, last_date timestamp, last_user text ); CREATE FUNCTION emp_stamp() RETURNS trigger AS $emp_stamp$ BEGIN -- Проверить, что указаны имя сотрудника и зарплата IF NEW.empname IS NULL THEN RAISE EXCEPTION 'empname cannot be null'; END IF; IF NEW.salary IS NULL THEN RAISE EXCEPTION '% cannot have null salary', NEW.empname; END IF; -- Кто будет работать, если за это надо будет платить? IF NEW.salary < 0 THEN RAISE EXCEPTION '% cannot have a negative salary', NEW.empname; END IF; -- Запомнить, кто и когда изменил запись NEW.last_date := current_timestamp; NEW.last_user := current_user; RETURN NEW; END; $emp_stamp$ LANGUAGE plpgsql; CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp FOR EACH ROW EXECUTE PROCEDURE emp_stamp();
Stuck with a problem? Got Error? Ask ChatGPT!
Copy Clear