функция в plsql - PullRequest
       5

функция в plsql

0 голосов
/ 22 апреля 2020

Я создал эту функцию, и она работает:

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;

Если я затем наберу: выберите log_in («номер социального страхования», «пароль») из двойного; тогда я получаю «1», так что это работает. Но вы можете в основном напечатать все, что захотите, и это сработает, так что это не чистый код. Поскольку вы не можете включить подзапрос в оператор if, как вы можете создать функцию, чтобы вы возвращали 1, только когда вы фактически вводите номер социального страхования (ssnr) и пароль, который соответствует таблице фактических клиентов? а в противном случае вы возвращаете 0?

1 Ответ

1 голос
/ 22 апреля 2020

Не уверен, что вы можете иметь несколько строк для одного и того же клиента. Если да, то используйте это:

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;
...