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