Hola como andas...
Podrias utilizar una funcion para ingresar los datos a la tabla, y con la misma retornar el error correspondiente. Esto lo podrias hacer con plpgsql en el motor, o bien podrias por supuesto capturar el error desde el lenguaje que estes usando y emitir el mensaje correspondiente.
Supongamos la tabla creada con:
Código:
CREATE TABLE Aseguradores(
idAsegurador BIGSERIAL NOT NULL,
nombre VARCHAR(50) NOT NULL,
cuit CHAR(13) NOT NULL,
domicilio VARCHAR(50),
telefono CHAR(20),
activo BOOLEAN DEFAULT TRUE,
PRIMARY KEY (idAsegurador),
CHECK (cuit ~ '[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9]'),
UNIQUE (cuit)
);
Como ves, el telefono tiene un maximo de 20 caracteres. Podriamos hacer una funcion como la siguiente:
Código:
CREATE OR REPLACE FUNCTION ssp_agregar_asegurador(Aseguradores.nombre%TYPE,
Aseguradores.cuit%TYPE,
Aseguradores.domicilio%TYPE,
Aseguradores.telefono%TYPE)
RETURNS Aseguradores.idAsegurador%TYPE AS $$
DECLARE
nNombre ALIAS FOR $1;
nCuit ALIAS FOR $2;
nDomi ALIAS FOR $3;
nTelefono ALIAS FOR $4;
idA Aseguradores.idAsegurador%TYPE;
BEGIN
--Comprobamos que nombre sea valido.
IF nNombre IS NULL OR nNombre = '' THEN
RAISE EXCEPTION 'El valor de la columna NOMBRE no debe ser nulo ni vacio.';
END IF;
--Comprobamos que cuit sea valido.
IF nCuit IS NULL OR nCuit = '' THEN
RAISE EXCEPTION 'El valor de la columna CUIT no debe ser nulo ni vacio.';
END IF;
--Comprobamos que cuit sea valido.
IF NOT nCuit ~ '[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]-[0-9]' THEN
RAISE EXCEPTION 'El valor de la columna CUIT debe ser de la forma: 00-00000000-0';
END IF;
--Comprobamos que la longitud de telefono no supere el maximo.
IF char_length(nTelefono) > 20 THEN
RAISE EXCEPTION 'El TELEFONO tiene mas caracteres de los permitidos (20).';
END IF;
--Por defecto, esta activo (activo = true)
INSERT INTO Aseguradores
VALUES(DEFAULT, btrim(nNombre), btrim(nCuit), btrim(nDomi), nTelefono, DEFAULT)
RETURNING idAsegurador INTO idA;
RETURN idA;
END;
$$ LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER;
y para agregar un asegurador usariamos:
Código:
SELECT ssp_agregar_asegurador('aseg', '11-11111111-1', NULL, '12345678912345678912')
espero te sirva....
salu2