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 ) );