-------------1. 加密程序数据库触发子scjmmm---------------------- REM 对GHXXB制立数据库触发子(当INSERT OR UPDATE GHXXB时触发) drop trigger scjmmm; create or replace trigger scjmmm before insert or update of mm On ghxxb For each Row Begin :new.mm:=ENCRYPT(:new.mm,:NEW.GH,TO_CHAR(SYSDATE,'SS')); End; / -------------2. 密码的加密程序ENCRYPT---------------------- Create or Replace Function ENCRYPT (Inpass In Varchar2,IN_GH In Varchar2,IN_SS In Varchar2) Return Varchar2 Is bcs varchar2(20); bcs1 number; cs number; jg number; m_gh VARCHAR2(4); m_mm VARCHAR2(20); Begin m_gh:=IN_GH; m_mm:=INPASS; cs:=TO_NUMBER(IN_SS); If cs<=1 then cs:=77 ;end if; bcs:=substr(to_char(ascii(substr(m_gh,1,1))),1,2); If bcs<'1' then bcs:='7' ;end if; m_gh:=substr(m_gh,2); Loop EXIT WHEN nvl(length(m_gh),0)=0 ; bcs:=bcs||substr(to_char(ascii(substr(m_gh,1,1))),-1,1); m_gh:=substr(m_gh,2); End loop; Loop EXIT WHEN nvl(length(m_mm),0)=0 ; bcs:=bcs||substr(to_char(ascii(substr(m_mm,1,1))),-1,1); m_mm:=substr(m_mm,2); End loop; bcs1:=to_number(bcs); jg:=cs*bcs1; Loop EXIT WHEN length(to_char(jg))>13; jg:=jg*cs ; End loop; RETURN(IN_SS||substr(to_char(jg),1,14)); End; / grant execute on ENCRYPT to public;