2016-12-01 62 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'' –