Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR REPLACE FUNCTION getInitials(name VARCHAR) RETURNS VARCHAR
- AS $$
- DECLARE
- initials VARCHAR = '';
- BEGIN
- initials = SUBSTR(name, 1, 1);
- WHILE (STRPOS(name, ' ') > 0)
- LOOP
- name = SUBSTR(name, STRPOS(name, ' ') + 1);
- initials = initials || SUBSTR(name, 1, 1);
- END LOOP;
- RETURN initials;
- END
- $$ LANGUAGE plpgsql;
- SELECT * INTO people_copy FROM people ORDER BY id LIMIT 20;
- ALTER TABLE people_copy
- ADD COLUMN initials VARCHAR(255);
- UPDATE people_copy SET initials = getInitials(name);
- CREATE OR REPLACE FUNCTION updateInitials()
- RETURNS TRIGGER
- AS $$
- BEGIN
- NEW.initials = getInitials(NEW.name);
- RETURN NEW;
- END
- $$ LANGUAGE plpgsql;
- CREATE TRIGGER updateInitialsTrigger
- BEFORE INSERT OR UPDATE
- ON people_copy
- FOR EACH ROW
- EXECUTE FUNCTION updateInitials();
- CREATE OR REPLACE FUNCTION stopDeleteOnName()
- RETURNS TRIGGER
- AS $$
- BEGIN
- IF OLD.name LIKE 'B%' THEN
- RETURN NEW;
- END IF;
- RETURN OLD;
- END
- $$ LANGUAGE plpgsql;
- CREATE TRIGGER stopDeleteOnNameTrigger
- BEFORE DELETE
- ON people_copy
- FOR EACH ROW
- EXECUTE FUNCTION stopDeleteOnName();
- CREATE PROCEDURE getPersonAge(person_id BIGINT, INOUT age INTEGER)
- AS $$
- DECLARE
- dday DATE;
- bday DATE;
- BEGIN
- SELECT birthday, deathday INTO bday, dday FROM people WHERE id = person_id;
- IF bday IS NULL THEN
- age = 0;
- ELSEIF dday IS NULL THEN
- age = (CURRENT_DATE - bday)/365;
- ELSE
- age = (dday - bday)/365;
- END IF;
- END
- $$ LANGUAGE plpgsql;
- DO $$
- DECLARE
- theAge INTEGER;
- BEGIN
- CALL getPersonAge(240, theAge);
- RAISE INFO 'The age is %', theAge;
- END
- $$;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement