我的程序出错了

时间:2016-10-19 02:47:32

标签: oracle plsql

在我看来,真实的一切都是完美的。为什么不断说警告:用编译错误创建过程?请问有谁知道有什么问题吗? enter image description here

2 个答案:

答案 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) );

然而:

  1. 您应该使用varchar2而不是varchar
  2. 我无法看到选择users.user_idacctuser(令人困惑的命名系统顺便说一句)然后检查该用户ID是否大于1的意义,如果是这样则警告用户有两个以上账户。 user_id表格中users的典型值是多少? ID高于1的内容与帐户数量有什么关系?你的意思是计算行数吗?如果users.email不是唯一的,那么您需要重新考虑一下这个方法。
  3. 我非常希望这不适用于任何真实的系统,因为它以纯文本形式存储密码。至少如果你将它们与电子邮件地址一起散列,那将是至关重要的。