2017-04-01 53 views
1

需要创建一个验证密码的功能(超过5个字符,与上一个不同,它既不是“密码”也不是“123456”) 我试过但我得到错误ORACLE SQL密码功能

CREATE OR REPLACE FUNCTION my_verification_function (
    username VARCHAR2, 
    password VARCHAR2, 
    old_password VARCHAR2) 
RETURN BOOLEAN IS 
BEGIN 
    IF LENGTH(password) < 6 THEN RETURN FALSE; 
    ELSE IF (password = "password" OR password = '123' OR password = old_password) THEN RETURN FALSE         
    ELSE RETURN TRUE; 
    END IF; 
END my_verification_function;$ 
+1

'OR password ='??也没有'如果'。有关详细信息,请参阅手册:http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/controlstatements.htm#LNPLS391和“password”指的是列或变量。字符串常量需要放在单引号中。 –

+0

为什么在数据库中需要直接在UI /前端级别完成此操作? – Spidey

回答

2
CREATE OR REPLACE FUNCTION my_verification_function (
    username VARCHAR2, 
    pass VARCHAR2, 
    old_password VARCHAR2) 
RETURN varchar2 IS 
BEGIN 
    IF LENGTH(pass) < 6 THEN RETURN 'FALSE'; 
    ELSIF (pass = 'password' OR pass = '123456' OR pass = old_password) THEN RETURN 'FALSE'; 
    ELSE RETURN 'TRUE'; 
    END IF; 
END; 

几个注意事项:

1)您应该使用ELSIF代替ELSE IF

2)如果需要调用次是在“纯”SQL中的功能,BOOLEAN类型会给你错误,所以你可以用VARCHAR2来代替。

3)不要使用保留的话就像PASSWORD

+0

谢谢! 我现在需要使用此功能创建PROFILE,所以我使用 PASSWORD_VERIFY_FUNCTION my_verification_function; 但我不断收到此错误: ORA-28004:在my_verification_function中指定的函数的无效参数 – LAXO

+0

我从来没有创建PROFILE,我没有任何这方面的经验,对不起,但我不能在这种情况下给任何建议 –

2

应该这样做:

CREATE OR REPLACE FUNCTION my_verification_function (
    username VARCHAR2, password VARCHAR2, old_password VARCHAR2) 
RETURN BOOLEAN AS 
BEGIN 

    IF LENGTH(password) < 6 THEN 
     RETURN FALSE; 
    ELSIF (password = "password" OR password = '123' OR password = old_password) THEN 
     RETURN FALSE         
    ELSE 
     RETURN TRUE; 
    END IF; 
END my_verification_function; 
/

alter profile default limit password_verify_function my_verification_function; 

参数名称USERNAEMPASSWORD似乎没有什么问题,因为Oracle提供的默认功能(位于在ORACLE_BASE/ORACLE_HOME/RDBMS/ADMIN/UTLPWDMG.SQL)也使用它们。