答案 0 :(得分:0)
"设置服务器输出"不适用于存储过程。
永远不要使用"选择"除非你确定知道结果是1记录。 在您的示例中,结果也可以是2(或更多)记录。
首先制作一个光标来计算记录。 如果计数结果为0(零)则显示该消息。如果计数结果为1,则使用"选择"。更好的开放,取,紧密的结构。如果计数的结果超过1则显示有超过1(!!!)个数的消息。
这是工作还是与学校有关的问题?
答案 1 :(得分:0)
通过一些OCR和手动摆弄,我按照以下步骤进行操作:
create or replace procedure LOGIN_USE(USER_EMAIL IN VARCHAR, USER_PASSWORD IN
VARCHAR) IS
acttype users.account_type%type;
psword users. password%type;
acctuser users. user_id %type;
message varchar(100) := 'User name or password are incorrect';
Begin
SELECT account_type, password, user_id INTO acttype, psword, acctuser
FROM users
WHERE email = USER_EMAIL;
IF(psword = USER_PASSWORD) THEN
dbms_output.put_line('Hello, and Welcome ' || USER_EMAIL);
dbms_output.put_line('Account Type ' || acttype);
ELSIF (acctuser >= 2) THEN
dbms_output.put_line('Warning, You have more than two accounts');
ELSE
dbms_output.put_line(message);
END IF;
END;
当整理可读性时(你应该养成自己做这个的习惯),我明白了:
create or replace procedure login_use
( user_email in varchar
, user_password in varchar )
as
acttype users.account_type%type;
psword users.password%type;
acctuser users.user_id%type;
message varchar(100) := 'User name or password are incorrect';
begin
select account_type, password, user_id
into acttype, psword, acctuser
from users
where email = user_email;
if psword = user_password then
dbms_output.put_line('Hello, and Welcome ' || user_email);
dbms_output.put_line('Account Type ' || acttype);
elsif acctuser >= 2 then
dbms_output.put_line('Warning, You have more than two accounts');
else
dbms_output.put_line(message);
end if;
end;
在我创建USERS
表格为
create table users
( account_type varchar2(10)
, password varchar2(20)
, user_id integer
, email varchar2(50) );
然而:
varchar2
而不是varchar
。users.user_id
到acctuser
(令人困惑的命名系统顺便说一句)然后检查该用户ID是否大于1的意义,如果是这样则警告用户有两个以上账户。 user_id
表格中users
的典型值是多少? ID高于1的内容与帐户数量有什么关系?你的意思是计算行数吗?如果users.email
不是唯一的,那么您需要重新考虑一下这个方法。