I have to bring a solution to the match partial problem in postgresql. this is what I do..
DROP TRIGGER IF EXISTS match_partial on futbolista;
DROP FUNCTION IF EXISTS match_partial();
CREATE FUNCTION match_partial()
RETURNS TRIGGER AS $$
DECLARE
tmp club%ROWTYPE;
BEGIN
IF (NEW.id_club = NULL AND NEW.nom_club = NULL) THEN
RETURN NEW;
ELSE
SELECT * INTO tmp FROM club WHERE (club.id_club = NEW.id_club AND club.nom_club = NEW.nom_club);
IF FOUND THEN
RETURN NEW;
ELSE
IF (NEW.id_club = NULL) THEN
SELECT * INTO tmp FROM club WHERE (club.nom_club = NEW.nom_club);
IF FOUND THEN
RETURN NEW;
END IF;
ELSE
IF (NEW.nom_club = NULL) THEN
SELECT * INTO tmp FROM club WHERE (club.id_club = NEW.id_club);
IF FOUND THEN
RETURN NEW;
END IF;
END IF;
END IF;
END IF;
END IF;
RETURN NULL;
END; $$
LANGUAGE plpgsql;
CREATE TRIGGER match_partial BEFORE INSERT OR UPDATE ON futbolista
FOR EACH ROW EXECUTE PROCEDURE match_partial();
and the tables are this..
-- creacion de la tabla club
DROP TABLE IF EXISTS club CASCADE;
CREATE TABLE club (
id_club NUMERIC(10, 0) NOT NULL,
nom_club VARCHAR(50) NOT NULL,
ciudad VARCHAR(50) NOT NULL,
pais VARCHAR(50) NOT NULL
);
-- creacion de la tabla futbolista
DROP TABLE IF EXISTS futbolista CASCADE;
CREATE TABLE futbolista (
dni NUMERIC(8, 0) NOT NULL,
nombre VARCHAR(50) NOT NULL,
apellido VARCHAR(50) NOT NULL,
id_club NUMERIC(10, 0) DEFAULT 0,
nom_club VARCHAR(50) DEFAULT 'JUGADOR LIBRE'
);
-- se agregan las claves primarias
ALTER TABLE club ADD CONSTRAINT pk_club PRIMARY KEY (id_club, nom_club);
ALTER TABLE futbolista ADD CONSTRAINT pk_futbolista PRIMARY KEY (dni);
the problem is that, when I insert some values into "futbolista", for example:
(10, 'diego', 'maradona', null, null)
nothing happens... can you help me? thanks!
ps: sorry for my bad english!
On a quick glance, I see a couple of instances of:
IF NEW.id_club = NULL ...
There may be more problems, I stopped looking there.
Nothing is ever the same as NULL
. Use instead:
IF NEW.id_club NULL ...
Make sure you understand the nature of a NULL
value, before you go on writing complex triggers. Basics first. Start in the manual here .
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.