题目:创建函数verify_function 。
要求:
 该函数提供限制:
 口令长度至少为4;
 口令不能和用户名相同;
 口令至少由字母,数字,一个符合组成;(特殊符号:!"#$%&()``*+,-/:;<=>?_)
 口令不能是一个简单的明显的单词;(单词:'welcome', 'database', 'account', 'user', 'password', 'oracle', 'computer', 'abcd')
  口令至少有3个字符与以前的口令不同;
 该函数提供三个varchar2类型的输入参数,分别是:username、password、old_password;
 该函数返回boolean类型,即口令是否校验成功。
我的:CREATE OR REPLACE FUNCTION user_password_verify
(username varchar2,
password varchar2,
old_password varchar2)
RETURN boolean 
IS
m integer := length(password);
differ integer;
isdigital boolean := false;
is boolean := false;
isletter boolean := false;
digit varchar2(20);
 varchar2(25);
letter varchar2(52);
BEGIN
digit := '0123456789';
letter := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
 := '!"#$%&()``*+,-/:;<=>?_';
-- 检查口令是否与用户名相同
IF password = username THEN
raise_application_error(-20000, '口令不能与用户名相同!');
END IF;
-- 检查口令长度
IF length(password) < 4 THEN
raise_application_error(-20001, '口令最少长度为4个字符!');
END IF;
-- 检查口令是否过于简单,不能是同一个词组组成的字符串
IF NLS_LOWER(upper)(password) IN (简单的单词) THEN
raise_application_error(-20002, '口令不能过于简单!');
END IF;
-- 检查口令中是否至少包括1个字母、1个数字和1个特殊字符
<<checkletter>>
For i in 1..Length(letter) loop
  For j in 1..M loop
If substr(password,j,1) = substr(letter,i,1) then
  Isletter := true;
  Goto checkdigital;
End if;
  End loop;
End loop;
If isletter = false then
  raise_application_error(-20003, '口令中至少包括1个字母、1个数字和1个特殊字符');
End if;
<<checkdigit>>
<<check>>
<<endcheck>>
-- 检查新口令与上一次的口令是否至少有3个字母不同
If old_password is not null then
  Differ := length(old_password) - length(password);
  If abs(differ) < 3 then
If length(old_password) < length(password) then
  M := length(old_password);
Else 
  M := length(password);
End if;
Differ := abs(differ);
For i in 1..M loop
  If substr(password,i,1) = substr(old_password,i,1) then
    Differ := differ + 1;
  End if;
End loop;
If differ < 3 then
  raise_application_error()
End if;
  End if;
End if;
-- Return true
Return(true);
End;
/
请问哪里错了,怎么改?