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