CREATE OR REPLACE VIEW lista_v AS SELECT imie || ' ' || nazwisko || ' (' || kraj || ')' FROM zawodnicy;
CREATE RULE lista_v_insert AS ON INSERT TO lista_v DO INSTEAD ( INSERT INTO zawodnicy (imie, nazwisko, kraj) VALUES ( substr(NEW.zawodnik,1,strpos(NEW.zawodnik,' ')-1), substr(NEW.zawodnik,strpos(NEW.zawodnik,' ')+1, strpos(NEW.zawodnik,'(')-2 - strpos(NEW.zawodnik,' ')), substr(NEW.zawodnik, strpos(NEW.zawodnik,'(')+1,3) ); ); CREATE RULE lista_v_delete AS ON DELETE TO lista_v DO INSTEAD ( DELETE FROM zawodnicy WHERE imie = substr(OLD.zawodnik,1,strpos(OLD.zawodnik,' ')-1) AND nazwisko = substr(OLD.zawodnik,strpos(OLD.zawodnik,' ')+1, strpos(OLD.zawodnik,'(')-2 - strpos(OLD.zawodnik,' ')) AND kraj = substr(OLD.zawodnik, strpos(OLD.zawodnik,'(')+1,3); ); CREATE OR REPLACE RULE lista_v_insert AS ON INSERT TO lista_v DO INSTEAD ( INSERT INTO zawodnicy (imie, nazwisko, kraj) ( SELECT substr(NEW.zawodnik,1,strpos(NEW.zawodnik,' ')-1), substr(NEW.zawodnik,strpos(NEW.zawodnik,' ')+1, strpos(NEW.zawodnik,'(')-2 - strpos(NEW.zawodnik,' ')), substr(NEW.zawodnik, strpos(NEW.zawodnik,'(')+1,3) WHERE (SELECT NEW.zawodnik FROM lista_v WHERE zawodnik = NEW.zawodnik) IS NULL ) ); CREATE OR REPLACE FUNCTION lista_v_nazwisko (z text) RETURNS text AS ' begin return substr(z,strpos(z,\' \')+1, strpos(z,\'(\')-2 - strpos(z,\' \')); end; ' LANGUAGE plpgsql ; CREATE OR REPLACE FUNCTION lista_v_kraj (z text) RETURNS text AS ' begin return substr(z, strpos(z,\'(\')+1,3); end; ' LANGUAGE plpgsql ; CREATE OR REPLACE FUNCTION lista_v_imie (z text) RETURNS text AS ' begin return substr(z,1,strpos(z,\' \')-1); end; ' LANGUAGE plpgsql ; CREATE OR REPLACE RULE lista_v_insert AS ON INSERT TO lista_v DO INSTEAD ( INSERT INTO zawodnicy (imie, nazwisko, kraj) ( SELECT lista_v_imie(NEW.zawodnik), lista_v_nazwisko(NEW.zawodnik), lista_v_kraj(NEW.zawodnik) WHERE (SELECT NEW.zawodnik FROM lista_v WHERE zawodnik = NEW.zawodnik) IS NULL ) );