Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

validar tamaño de un campo

Estas en el tema de validar tamaño de un campo en el foro de PostgreSQL en Foros del Web. Hola buenas tardes, estoy tratando de agregar datos a una tabla en postgres pero no se cómo hacer que cuando alguien inserte un dato que ...
  #1 (permalink)  
Antiguo 18/03/2008, 16:25
Avatar de jhonmario  
Fecha de Ingreso: marzo-2008
Mensajes: 22
Antigüedad: 16 años, 1 mes
Puntos: 0
Información validar tamaño de un campo

Hola buenas tardes, estoy tratando de agregar datos a una tabla en postgres pero no se cómo hacer que cuando alguien inserte un dato que exceda el tamaño no me saque error, sino que le diga al usuario que el dato que esta tratando de agregar excede el tamaño. Cómo se podria hacer eso?

Este es el mensaje que me saca.

Query failed: ERROR: value too long for type character varying(8)


gracias
  #2 (permalink)  
Antiguo 18/03/2008, 21:55
 
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
  #3 (permalink)  
Antiguo 19/03/2008, 07:24
Avatar de jhonmario  
Fecha de Ingreso: marzo-2008
Mensajes: 22
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: validar tamaño de un campo

Ok, muchas gracias, voy a probar a ver como me va.....
  #4 (permalink)  
Antiguo 19/03/2008, 08:17
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 2 meses
Puntos: 13
Re: validar tamaño de un campo

Cita:
Iniciado por jhonmario Ver Mensaje
Hola buenas tardes, estoy tratando de agregar datos a una tabla en postgres pero no se cómo hacer que cuando alguien inserte un dato que exceda el tamaño no me saque error, sino que le diga al usuario que el dato que esta tratando de agregar excede el tamaño. Cómo se podria hacer eso?

Este es el mensaje que me saca.

Query failed: ERROR: value too long for type character varying(8)


gracias
capturas este error en tu aplicación y lo tratas como quieras!

No hace falta que te hagas una funcion que lo unico que va a hacer es cambiarte el texto del error!
  #5 (permalink)  
Antiguo 28/03/2008, 08:39
Avatar de jhonmario  
Fecha de Ingreso: marzo-2008
Mensajes: 22
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: validar tamaño de un campo

Hey, ya logré que me validara el tamaño de el campo, lo hice en javascript y este es el código
GRACIAS por su colaboracion

if (forma.cargo.value.length > 8)
{
alert("DEBE SER MENOR O IGUAL A 8");
forma.cargo.focus();
return false;
break;
}
  #6 (permalink)  
Antiguo 28/03/2008, 12:34
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Re: validar tamaño de un campo

Y si el cliente tiene desactivado javascript que haras?

En casos de validacion, siempre es bueno validar ademas del lado del servidor, con php o el lenguaje del lado del servidor que este usando
  #7 (permalink)  
Antiguo 27/05/2011, 00:01
 
Fecha de Ingreso: mayo-2011
Ubicación: Mexico
Mensajes: 16
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Re: validar tamaño de un campo

Cita:
Iniciado por Sergestux Ver Mensaje
Y si el cliente tiene desactivado javascript que haras?

En casos de validacion, siempre es bueno validar ademas del lado del servidor, con php o el lenguaje del lado del servidor que este usando
Interesante... la verdad la validacion siempre la quise hacer en php... el problema es que como soy nuevo no entendi mucho y por eso la hice en javascript :S
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:58.