Función que valida un correo electrónico en Oracle PL/SQL

6
2322
CREATE OR REPLACE FUNCTION 
EMAILVALIDATE_V1(email VARCHAR2) RETURN NUMBER IS

t_valid NUMBER(1);
t_totallen NUMBER(2);
t_counter NUMBER(2):=0;
t_atpos NUMBER(2):= 1;
i NUMBER(2) := 1;
t_pointpos NUMBER(2):= 1;

mail_ch VARCHAR2(1);

BEGIN

t_totallen := LENGTH(email);
t_counter := t_totallen;
i := 1;
t_valid := 1;


-- Validamos la longitud del correo, no puede ser vacío 
IF LENGTH(ltrim(rtrim(email))) = 0 THEN
t_valid := 0;
ELSE
-------------------------------------- 

--Valida que no contenga caracteres inválidos en un correo
t_counter := t_totallen;

WHILE t_counter > 0
LOOP
mail_ch := substr(email,i,1);
i := i+1;
t_counter := t_counter -1;

IF mail_ch IN (
' ','!','#','$','%',
'^','&','*','(',')',
'-','','"',
'+','|','{','}','[',
']',':','>','<','?',
'/','','=') THEN
t_valid := 0;
EXIT;
END IF;

END LOOP;
---------------------------------------

--Valida que no tenga mas de un @
t_atpos := instr(email,'@',1,2) ;

IF t_atpos > 1 then
t_valid := 0;
END IF;
---------------------------------------

--Valida que contenga solo un @
t_atpos := instr(email,'@',1);

IF t_atpos IN (0,1) THEN
t_valid := 0;
END IF;
---------------------------------------

--Validamos que tenga por lo menos un punto (.)
t_pointpos := instr(email,'.',1) ;

IF t_pointpos IN (0,1) THEN
t_valid := 0;
END IF;
----------------------------------------

END IF;

RETURN t_valid;

END;

 

6 Comentarios

  1. También se pueden utilizar las expresiones regulares. Ejemplo:

    Select Correo
    From (Select ‘nombre@dominio.com’ Correo
    From Dual)
    Where Regexp_Like(Correo,
    ‘\s*\w+([-+.»]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s*’);

    Si retorna el correo es porque cumple la expresión, en caso contrario no devolverá ninguna fila.

  2. Buenas tardes, me gustaría saber si hay una manera de validar los correos en SQL o en R a partir de un script que te verifique directamente en una página tipo email verifier si el correo es válido de tal manera de no hacerlo uno a uno y que además me cree una columna en donde me diga si es o no correcto. Muchas gracias

  3. Ola,
    MUITO OBRIGADO.
    I DON’T SPEAK SPANISH BUT I SPEAK PORTUGUESE AND COULD UNDERSTAND YOU.
    THANK YOU SO MUCH I WAS ABLE TO DO IT WITH YOUR MODEL AS AN EXEMPLE.
    HERE IS HOW I DID IT:
    CREATE OR REPLACE FUNCTION valida_email (mail in varchar2) RETURN number IS
    CONT NUMBER (2) := 1;
    MAILV VARCHAR (200);
    resulta number (1);
    arroba number(2) := 1;
    BEGIN
    — VALIDA SE NAO É NULO
    IF mail IS NULL then
    RETURN 1;
    ELSE
    — VALIDA CARACTERES
    MAILV := length(mail);
    WHILE CONT > 0 and MAILV SUBSTR(MAIL, -1)
    LOOP
    MAILV := SUBSTR(MAIL, cont, 1);
    cont := cont +1;
    if MAILV IN (‘ ‘,’!’,’#’,’$’,’%’,
    ‘^’,’&’,’*’,'(‘,’)’,
    ‘-‘,»,'»‘,
    ‘+’,’|’,'{‘,’}’,'[‘,
    ‘]’,’:’,’>’,’ 1 then
    return 1;
    end if;

    if mail like ‘%@%.com’ then
    resulta := 0;
    end if;
    END IF;
    RETURN resulta;
    END;
    /

Dejar respuesta

Please enter your comment!
Please enter your name here

Protected with IP Blacklist CloudIP Blacklist Cloud