Istnieje NULLIF()
funkcja:
SELECT NULLIF(var, '');
Jeśli zmienna
przechowuje wartość w $2, otrzymujesz NULL
zamiast tego.
W przykładzie zastępuję pusty ciąg:''
z NULL
.
Nie ma nie ma pustego ciągu dla typu integer . Po prostu niemożliwe. Od NULLIF()
nie można zmienić typu danych, musisz oczyścić swoje dane wejściowe w PHP.
Jeśli nie określiłeś domyślnej kolumny, możesz także po prostu pominąć kolumnę w WSTAW
polecenie i zostanie wypełnione NULL
(co jest domyślnym DEFAULT
).
Sprawdź, czy parametr jest pusty w PHP i nie dołączaj kolumny w INSERT
polecenie, jeśli tak.
Lub użyj literu PHP NULL zamiast tego jak Quassnoi demonstruje tutaj .
Reszta ma sens tylko dla typów łańcuchowych
Aby upewnić się,, że , nikt nie może wpisać pustego ciągu, dodaj SPRAWDZ
ograniczenie do tabeli:
ALTER TABLE tr_view
ADD CONSTRAINT tr_view_age_not_empty CHECK (age <> '');
Aby unikać wyjątków spowodowane tym, możesz dodać wyzwalacz, który automatycznie naprawia dane wejściowe:
CREATE OR REPLACE FUNCTION trg_tr_view_avoid_empty()
RETURNS trigger AS
$func$
BEGIN
IF NEW.age = '' THEN
NEW.age := NULL;
END IF;
IF NEW.month = '' THEN
NEW.month := NULL;
END IF;
RETURN NEW;
END
$func$ LANGUAGE plpgsql
CREATE TRIGGER tr_view_avoid_empty
BEFORE INSERT OR UPDATE ON tr_view
FOR EACH ROW
WHEN (NEW.age = '' OR NEW.month = '')
EXECUTE PROCEDURE trg_tr_view_avoid_empty();