bazy_danych:postgresql

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
	)
);
 
bazy_danych/postgresql.txt · ostatnio zmienione: 2011-11-08 13:47 (edycja zewnętrzna)