【问题标题】:function in plsqlplsql中的函数
【发布时间】:2020-08-06 00:09:33
【问题描述】:

我已经创建了这个函数并且它可以工作:

create or replace function log_in(
p_ssnr in customer.ssnr%type,
p_password in customer.password%type)
return number
as
v_number number(1);
    begin
        if 
        (p_ssnr is not null and p_password is not null) then 
        v_number:= 1;
        else
        v_number:= 0;
        end if;
    return v_number;
    end;

如果我接着输入: select log_in('social security number','the password') from dual;然后我得到一个“1” 所以它有效。但是你基本上可以输入你想要的任何东西,它会工作,所以它不是一个干净的代码。由于您不能在 if 语句中包含子查询,那么如何创建函数以便在您实际输入社会保险号 (ssnr) 和与实际客户表匹配的密码时只返回 1?否则返回 0?

【问题讨论】:

    标签: sql function plsql


    【解决方案1】:

    不确定您是否可以为同一客户设置多行。如果是,那么使用这个:

    create or replace function log_in(
    p_ssnr in customer.ssnr%type,
    p_password in customer.password%type)
    return number
    as
    v_number number(1);
        begin
            select case when count(*) > 0 then 1 else 0 end
            into v_number
            from customer
            where ssnr = p_ssnr and password = p_password;
        return v_number;
        end;
    

    如果没有,那应该没问题:

    create or replace function log_in(
    p_ssnr in customer.ssnr%type,
    p_password in customer.password%type)
    return number
    as
    v_number number(1);
        begin
             count(*) 
            into v_number
            from customer
            where ssnr = p_ssnr and password = p_password;
        return v_number;
        end;
    

    【讨论】:

      猜你喜欢
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-11
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 2022-12-11
      相关资源
      最近更新 更多