17,086
社区成员
发帖
与我相关
我的任务
分享
CREATE OR REPLACE FUNCTION checkpw (pid VARCHAR2, pw VARCHAR2)
RETURN VARCHAR2
IS
vpw VARCHAR2 (20);
i NUMBER;
tpw VARCHAR2 (20);
vdate DATE;
vseed NUMBER;
BEGIN
SELECT MAX (PASSWORD), MAX (insert_date)
INTO vpw, vdate
FROM public_mgr.user_profile
WHERE UPPER (login) = pid;
IF vpw IS NULL
THEN
RETURN ('N');
END IF;
IF TO_NUMBER (TO_CHAR (vdate, 'HH24')) = 0
THEN
vseed := 10;
ELSE
vseed := TO_NUMBER (TO_CHAR (vdate, 'HH24'));
END IF;
i := 1;
tpw := '';
WHILE i <= LENGTH (pw)
LOOP
tpw := tpw || CHR (TO_NUMBER (ASCII (SUBSTR (UPPER (pw), i, 1))) + vseed + i);
i := i + 1;
END LOOP;
IF tpw = vpw
THEN
RETURN ('Y');
ELSE
RETURN ('N');
END IF;
END;
/