2016-12-01 66 views
0

当我尝试运行下面的函数代码时,Oracle Apex 5 SQL命令出现此错误:'ORA-24344:成功并出现编译错误'Oracle APEX 5创建函数错误,它可能是什么?

我已经尝试将它写入所有大写字母,但仍出现问题。你觉得我做错了什么?帮助将非常感激。

CREATE OR REPLACE FUNCTION al_auth_authentication (p_username IN VARCHAR2, p_password IN VARCHAR2) 
    RETURN boolean 
    IS 
    1_user AL_USER_LOGIN.USER_NAME%type := UPPER(p_username); 
    1_pwd AL_USER_LOGIN.USER_PASSWORD%type; 
    1_id AL_USER_LOGIN.USER_ID%type; 
    BEGIN 
    SELECT USER_ID, USER_PASSWORD 
    INTO 1_id, 1_pwd 
    FROM AL_USER_LOGIN 
    WHERE UPPER(USER_NAME) = 1_user; 
    RETURN 1_pwd = dbms_crypto.hash (UTL_I18N.string_to_raw(p_password || 1_id || UPPER(p_username), 'AL32UTF8'), dbms_crypto.hash_sh1); 
    EXCEPTION 
    WHEN no_data_found then return false; 
    END al_auth_authentication; 

回答

0

PL/SQL变量(和一般的Oracle identifiers)不能以数字开头,所以1_user1_pwd1_id无效。也许你的意思是l_user,l_pwdl_id

虽然你应该在你的问题中包含完整的编译错误。您可以在重点编译错误的开发工具(如SQL DeveloperPL/SQL Developer)或SQL*Plus中使用show errors命令编译它,也可以仅查询user_errors(或all_errors,如果您没有作为所有者连接),则编译它。

除非你在COBOL工作,否则没有必要在块大写代码,所以请不要。

+0

嗨,谢谢。但是,更改变量的名称不起作用,并且仍然会带来相同的错误。我不确定完整的编译错误,我刚刚得到了这个'PLS-00103:遇到符号'SELECT''和'PLS-00103:遇到符号'1'...'我修正了1虽然 –

+0

你可以或者在开发工具中进行编译,该工具突出显示编译错误,或者查询user_errors(或者如果未作为所有者连接,则为all_errors)。顺便提一下,有三个变量以'1_'开始(即数字'1')。也许你的意思是'l_'(字母'L')。 –

+0

它还说'必须声明'PLS-00201:标识符'DBMS_CRYPTO'' –