0

postgresqlの部分一致問題の解決策を提示する必要があります。これが私がすることです..

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

そしてテーブルはこれです。

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

問題は、「futbolista」にいくつかの値を挿入すると、たとえば次のようになります。

(10, 'diego', 'maradona', null, null)

何も起こらない...助けてくれませんか?ありがとう!

ps:私の悪い英語でごめんなさい!

4

1 に答える 1

1

一見すると、次のような例がいくつかあります。

IF NEW.id_club = NULL ...

もっと問題があるかもしれません、私はそこで見るのをやめました。と同じものはありませ
ん。代わりに使用してください:NULL

IF NEW.id_club IS NULL ...

NULL複雑なトリガーを作成する前に、値の性質を理解してください。最初に基本。こちらのマニュアルから始めてください

于 2013-03-24T02:04:39.530 に答える