【发布时间】:2019-11-27 22:17:13
【问题描述】:
所以我的任务包括一个与 PL/SQL 中的前一个密码不同的 3 个字符的密码。 代码如下:
IF old_password IS NOT NULL THEN
differ := length(old_password) - length(password);
differ := abs(differ);
IF length(password) < length(old_password) THEN
m := length(password);
ELSE
m := length(old_password);
END IF;
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(-20011, 'Password should differ from the \
old password by at least 3 characters');
END IF;
END IF;
-- Everything is fine; return TRUE ;
RETURN(TRUE);
如果我的旧密码是“aaa”,而我将其更改为“aaa222”,则会出现错误。没关系。
但是如果我的旧密码是“aaa”并且我将其更改为“aaa2222”,它不会给我一个错误,我不知道为什么。这应该给我一个错误..
怎么了?有什么解决办法吗?
【问题讨论】:
-
aa1a与aaa2怎么样?它应该返回什么以及为什么? -
当我使用“aaa”作为旧密码和“aaa222”作为新密码运行您的代码时,它成功完成(即没有错误)。 ??? db<>fiddle here
-
它应该返回一个错误,因为它必须与以前的密码有 3 个不同的字符。在这种情况下,只有“2”不同。但是这段代码有问题,因为它成功完成了
-
您首先检查长度是否不同。使用
'aaa'作为旧密码,'aaa222'作为新密码。长度差为 3,因此您永远不会进入以IF differ < 3 THEN开头的块。也许您想要做的是创建每个密码中唯一字符的集合,然后进行比较。 -
我消除了“IF different
标签: oracle plsql passwords plsqldeveloper