我尝试过全部大写,但问题仍然存在。你觉得我做错了什么?非常感谢帮助。
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 :(得分:0)
PL / SQL变量(以及一般的Oracle identifiers)不能以数字开头,因此1_user
,1_pwd
和1_id
无效。也许你的意思是l_user
,l_pwd
和l_id
?
但是,您应该在问题中包含完整的编译错误。您可以在突出编译错误的开发工具(例如SQL Developer或PL/SQL Developer)或SQL*Plus中编译它,并使用show errors
命令,或者只查询{ {1}}(如果您没有作为所有者关联,则为user_errors
。)
除非你在COBOL工作,否则无需在大写字母中进行编码,所以请不要。