简体   繁体   中英

match partial implementation in postgresql

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM