Ver Mensaje Individual
  #6 (permalink)  
Antiguo 31/05/2011, 22:08
santos_2701
 
Fecha de Ingreso: mayo-2011
Mensajes: 3
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Navegando con gotoAndPlay

hola soy nuevo en este foro necesito ayuda alguien me podria ayudar para que este codigo solo me deje insertar carcateres de la A-Z en un campo de una tabla con procedimientos almacenados me encotre este codigo en la red pero este hace que no permita caracteres de espacio al / yo necesito que solo me deje insetar caracteres de A-Z:
CREATE TABLE PRUEBA
(
IDCLAVE CHAR(10) PRIMARY KEY,
DESCRIP VARCHAR(30)
);

Ahora crearemos una funcion solo para validar caracteres ASCII que no esten entre 32 y 47, ya que insertaremos en un campo que es llave primaria, recuerda que las claves primarias no contienes espacios ni caracteres ascii entre 32 y 47, en este ejemplo que pondre:


CREATE FUNCTION OK
(CADENA VARCHAR(10))
RETURNS INTEGER
BEGIN

DECLARE LONG_CAD INT;
DECLARE CARASC INT;
DECLARE i INT DEFAULT 1 ;
DECLARE B INT DEFAULT 1;
declare C int;


SET LONG_CAD=LENGTH(CADENA);

IF LONG_CAD=1 OR LONG_CAD=0 THEN

SET B=0;



ELSEIF LONG_CAD>1 THEN


WHILE (i<=LONG_CAD AND B=1) DO

SET CARASC=ASCII(SUBSTR(CADENA,I,1));


SELECT CARASC BETWEEN 32 AND 47 INTO C;

IF C=0 THEN

SET i=i+1;
SET B=1;

ELSEIF C=1 THEN

SET B=0;

END IF;


END WHILE;


END IF;


RETURN B;
END;

Ahora el procedure que llamara a la funcion para validar :


CREATE PROCEDURE OKPRUEBA
(IN CADENA VARCHAR(10),IN DESCRIP VARCHAR(30))

BEGIN


IF OK(CADENA)=1 THEN

INSERT INTO PRUEBA VALUES(CADENA,DESCRIP);
SELECT 'ROW INSERTED OK' AS RESULTADO;

ELSEIF OK(CADENA)=0 THEN

SELECT 'EL CAMPO CLAVE CONTIENE CARACTERES NO VALIDOS' AS ERROR;

END IF;


END;