Er is de NULLIF()
functie:
SELECT NULLIF(var, '');
Als var
houdt de waarde in $2, je krijgt NULL
in plaats daarvan.
In het voorbeeld vervang ik de lege string:''
met NULL
.
Er is geen lege string voor het type integer . Gewoon niet mogelijk. Sinds NULLIF()
kan het gegevenstype niet wijzigen, u moet uw invoer in PHP opschonen.
Als u geen kolomstandaard heeft gedefinieerd, kunt u ook de kolom weglaten in de INSERT
commando en het wordt gevuld met NULL
(dit is de standaard DEFAULT
).
Controleer of de parameter leeg is in PHP en neem de kolom niet op in de INSERT
commando als dat zo is.
Of gebruik de PHP letterlijke NULL in plaats daarvan demonstreert Quassnoi hier .
De rest heeft alleen zin voor stringtypes
Om zeker te zijn , niemand kan een lege string invoeren voeg een CHECK
toe beperking tot de tabel:
ALTER TABLE tr_view
ADD CONSTRAINT tr_view_age_not_empty CHECK (age <> '');
Om uitzonderingen te vermijden hierdoor kunt u een trigger toevoegen die de invoer automatisch herstelt:
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();