La función de conversión a MD5 no funciona dentro de una función SQL Oracle.
Necesito marcar algunos datos hash en md5 dentro de una función.
Tengo la tabla BDMTMPMAIL_HARD que contiene algunos correos. Necesito hacer coincidir algunos correos de otra tabla en md5 con los correos de esta tabla.
Mi tabla con correos en md5
EMAILMD5 | MATCH |
---|---|
8747e564eb53cb2f1dcb9aae0779c2aa | 1 |
4545e564eqsqdsb2f1dcb46ae0779c2aa | 0 |
Tabla BDMTMPMAIL_HARD
TO_MD5(MAIL) | |
---|---|
exemple@gmail.com | 8747e564eb53cb2f1dcb9aae0779c2aa |
example2@sfr.fr | 368e564eqsq4242f1dc344242d79c2aa |
Uso una función, tomada de otro paquete, llamada ‘tomd5′ que convierte el correo en md5. Por lo tanto, utilizaré esta función en la tabla BDMTMPMAIL_HARD.
El problema es que cuando ejecuto la función, nunca termina.
He realizado varias pruebas, y la cuenta de selección está correcta. Si intento hacer la actualización sin la función, funciona. Si ejecuto la función sin el to_md5(), funciona.
Solo si incluyo dentro de la función to_md5, la función nunca termina.
¿Por qué la función funciona sin la función tomd5()?
UPDATE MY_TABLE SET MATCH =
FILTRE_MARKET_OP.FILTRE_V1_MARKET_OP_MD5(lower(emailMD5));
“`
FUNCTION FILTREV1MARKETOPMD5(mail IN varchar) RETURN NUMBER IS
hard number;
mailfiltre varchar2(300);
BEGIN
hard := 0;
mail_filtre := mail;
SELECT count(*) INTO hard FROM BDM_TMP_MAIL_HARD
WHERE EMAIL IS NOT NULL
AND to_md5(email) = mail_filtre;
IF hard >= 1 THEN
hard := 1;
GOTO FIN;
END IF;
<<FIN>>
RETURN hard;
END FILTREV1MARKETOPMD5;
De lo contrario, como esto no funciona, hago la actualización manualmente de esta manera:
update MYTABLE set MATCH = 1
where lower(emailMD5) in
( select tomd5(lower(EMAIL))
from BDMTMPMAILHARD
where EMAIL is not null )
and emailMD5 is not null;
Y esta es mi función md5 personalizada:
create or replace FUNCTION toMD5 (str IN VARCHAR2)
RETURN VARCHAR2
IS
vchecksum VARCHAR2(32);
BEGIN
vchecksum := LOWER( RAWTOHEX( UTLRAW.CASTTORAW( sys.dbmsobfuscationtoolkit.md5(inputstring => str) ) ) );
RETURN vchecksum;
EXCEPTION
WHEN NODATAFOUND THEN
NULL;
WHEN OTHERS THEN
— Consider logging the error and then re-raise
RAISE;
END toMD5;
davy.ai
Para marcar algunos datos encriptados en MD5 dentro de una función, podemos utilizar el siguiente código:
Sin embargo, parece haber un problema con la función to_md5(), lo cual causa que la función nunca termine cuando se utiliza dentro de FILTRE_V1_MARKET_OP_MD5. Para solucionar este problema, la actualización se puede realizar manualmente con el siguiente código:
La función to_MD5 convierte una entrada de cadena en su valor hash MD5.