2015-01-13 6 views
0

У меня есть следующий код sql в oracle client 11g. Я хотел бы преобразовать «ssno» в хэш-файл md5. Я читал другие сообщения, но никто из них не сказал, где разместить код. благодаря!преобразование varchar в md5

SELECT FS_HIRES."rsa", 
     FS_HIRES."ssno", 
     FS_HIRES."lname", 
     FS_HIRES."series", 
     FS_HIRES."grade", 
     FS_HIRES."pos_title", 
     FS_HIRES."ethnicity", 
     FS_HIRES."disability", 
     FS_HIRES."type_appt", 
     FS_HIRES."Perm_Temp", 
     FS_HIRES."gender", 
     FS_HIRES."age", 
     FS_HIRES."age_categories", 
     FS_HIRES."los", 
     FS_HIRES."date_apnt", 
     FS_HIRES."mm_apnt", 
     FS_HIRES."yy_apnt", 
     FS_HIRES."apnt_noa", 
     FS_HIRES."apnt_auth", 
     FS_HIRES.L2_DESC, 
     FS_HIRES.L3_DESC, 
     FS_HIRES.L4_DESC, 
     FS_HIRES.L5_DESC, 
     FS_HIRES."fy" 
    FROM FS_HIRES 
+0

'select md5 (yourfield), ...'? или как бы то ни было, что функция находится в оракуле. –

ответ

2

Константа HASH_MD5 не могут быть отнесены непосредственно из SQL, так как заявление:

SELECT FS_HIRES."rsa", 
     DBMS_CRYPTO.HASH(UTL_I18N.STRING_TO_RAW(FS_HIRES."ssno", 'AL32UTF8'), 
      DBMS_CRYPTO.HASH_MD5), 
     ... 

получит ошибку e "ORA-06553: PLS-221:« HASH_MD5 »не является процедурой или не определено». Вы можете либо использовать внутреннее значение этой константы, которая 2:

SELECT FS_HIRES."rsa", 
     DBMS_CRYPTO.HASH(UTL_I18N.STRING_TO_RAW(FS_HIRES."ssno", 'AL32UTF8'), 2), 
     ... 

Или, если вы не хотите, чтобы полагаться на константу, которая потенциально может измениться в будущих версиях, определить свою собственную функцию:

create or replace function my_md5(p_str varchar2) return raw is 
begin 
    return dbms_crypto.hash(utl_i18n.string_to_raw(p_str, 'AL32UTF8'), 
    dbms_crypto.hash_md5); 
end my_md5; 
/

... а потом называют это:

SELECT FS_HIRES."rsa", 
     MY_MD5(FS_HIRES."ssno", 'AL32UTF8') AS "ssno", 
     ... 

Если ваш персонаж базы данных не AL32UTF8, вам, возможно, придется сделать больше преобразования as mentioned in the documentation, и это будет легче скрыть, что в функция тоже.

+0

Спасибо. вот как я это сделал. создала функцию. Добавлено новое поле в мою таблицу, а затем обновил таблицу с помощью функции. Очень хорошо! Спасибо всем. – david

1

Попробуйте это:

select 
'123456789' as ssno, 
rawtohex(
DBMS_CRYPTO.Hash (
    UTL_I18N.STRING_TO_RAW ('123456789', 'AL32UTF8'), 
    2) 
) as ssno_md5 
from dual; 

Выход:

SSNO SSNO_MD5 
123456789 25F9E794323B453885F5181F1B624D0B 
Смежные вопросы