Ver Mensaje Individual
  #2 (permalink)  
Antiguo 18/03/2008, 21:55
bransh
 
Fecha de Ingreso: enero-2008
Mensajes: 25
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: validar tamaño de un campo

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