Как считать строки из двух столбцов? - PullRequest
1 голос
/ 14 апреля 2019

Я пытаюсь создать функцию входа в систему, которая берет номер клиента (pnr) и пароль из той же таблицы. Это нормально, чтобы создать функцию, но тест завершается со следующей ошибкой: ORA-00904: "P_PASSWD": ​​неверный идентификатор

create or replace function logga_in(
    p_pnr bankkund.pnr%type,
    p_passwd bankkund.passwd%type
    )
    return number
as
    v_resultat number(1);
begin
    select count(pnr) into v_resultat
    from   bankkund
    where  p_pnr = pnr
    and    p_passwd = passwd;

    return 1;
exception
    when no_data_found then
        return 0;
end;

1 Ответ

2 голосов
/ 14 апреля 2019

Существует еще одна проблема с вашим кодом, не предложенным в комментариях: функция count из select into не вызовет исключение NO_DATA_FOUND.Вы можете использовать условие IF на счетчике или сделать что-то подобное, что является предпочтительным

CREATE OR REPLACE FUNCTION logga_in (
    p_pnr      bankkund.pnr%TYPE,
    p_passwd   bankkund.passwd%TYPE
) RETURN NUMBER AS
    v_resultat NUMBER(1);
BEGIN
SELECT 1       --do not use count if you wish to handle no_data_found
     INTO v_resultat FROM
        bankkund WHERE  pnr = p_pnr AND
        passwd = p_passwd
AND ROWNUM = 1; --Add this 
  RETURN 1;
EXCEPTION
    WHEN no_data_found THEN
        RETURN 0;
END;

Теперь, что касается вызова процедуры, доступны различные опции, включая использование переменной связывания * 1008.*

VARIABLE  p_pnr    number        --use the datatype of bankkund.pnr%TYPE
VARIABLE p_passwd VARCHAR2(10)  --use the datatype of bankkund.passwd
SELECT logga_in(:p_pnr,:p_passwd) FROM dual;

Или переменная подстановки

SELECT logga_in('&p_pnr','&p_passwd') FROM dual;

При вводе введите данные.

Или используйте блок PL / SQL

DECLARE
v_res INT;
v_pnr    bankkund.pnr%type    := 12892;  --or appropriate value
p_passwd bankkund.passwd%type := some_passwd';
BEGIN
   v_res := logga_in();
 If v_res = 1 THEN
  do_something_u_want; --call or execute appropriate action.
 END IF;
END;
/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...