create or replace package body Test_MD5 as
function FN_GetMD5 (p_str IN VARCHAR2)RETURN VARCHAR2 AS 
begin 
 RETURN DBMS_OBFUSCATION_TOOLKIT.MD5( 
  input_string => Upper(P_Str)); 
end; 
Function FN_CheckUser 
  (P_UserName IN VARCHAR2 
   ,P_Password IN VARCHAR2) 
 Return Number 
Is 
  L_Password VarChar2(2000); 
begin 
 SELECT 
    Utl_Raw.Cast_To_Raw(Password) 
 INTO 
    L_Password 
 FROM  
    Test_User 
 WHERE  
    Upper(UserName) = UPPER(P_UserName); 
  If Utl_Raw.Cast_To_Raw(FN_GetMD5(P_Password))=L_Password Then 
   Return 1; 
  Else 
    Return 0; 
  End If; 
exception 
 WHEN NO_DATA_FOUND THEN 
  Return 0; 
END; 
End; 
--------------------------包头
CREATE OR REPLACE Package Test_MD5 AS
Function FN_GetMD5(P_Str In VarChar2)
Return VarChar2;
Function FN_CheckUser
(P_UserName In VarChar2
 ,P_Password In VarChar2)
Return Number;
End;

解决方案 »

  1.   

    用show errors;看看错误提示是什么?
    再把错误提示帖出来!!方便找错误
      

  2.   

    SQL> show error;
    错误:PACKAGE BODY TCCS.TEST_MD5:LINE/COL ERROR
    -------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    2/58     PLS-00103: Encountered the symbol "" when expecting one of the following:       begin function package pragma proced
      

  3.   

    字符错误!!楼主是直接从网上COPY 到sql*plus 上调试的吧?
    你把有空格符的地方在SQL*PLUS 里全部重新用空格符代替就可以了!!!记得还要建一个表:Test_User
    CREATE TABLE Test_User (UserName VARCHAR2(30) NOT NULL 
    Password VARCHAR2(2000)NOT NUL) 
     -------------------------------------
     1  CREATE OR REPLACE PACKAGE BODY Test_MD5 AS
     2  function FN_GetMD5 (p_str IN VARCHAR2)
     3  RETURN VARCHAR2 is
     4  BEGIN
     5  RETURN DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => Upper(P_Str));
     6  END FN_GetMD5;
     7  Function FN_CheckUser
     8  (P_UserName in VARCHAR2,
     9  P_Password in VARCHAR2)
    10  Return Number
    11  Is
    12  L_Password VarChar2(2000);
    13  BEGIN
    14  SELECT
    15  Utl_Raw.Cast_To_Raw(Password)
    16  INTO
    17  L_Password
    18  FROM
    19  Test_User
    20  WHERE
    21  Upper(UserName) = UPPER(P_UserName);
    22  If Utl_Raw.Cast_To_Raw(FN_GetMD5(P_Password))=L_Password Then
    23  Return 1;
    24  Else
    25  Return 0;
    26  End If;
    27  EXCEPTION
    28  WHEN NO_DATA_FOUND THEN
    29  Return 0;
    30  END;
    31* End;
    SQL> /程序包主体已创建