Hola lyha
Aqui te pongo un ejemplo:
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;
Con esto tienes un ejemplo, espero lo entiendas

y te sirva...ok
Saludos