如何计算两列中的行?

时间:2019-04-14 12:42:08

标签: oracle plsql

我尝试创建使用同一表中的客户编号(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 个答案:

答案 0 :(得分:2)

注释中未建议您的代码存在另一个问题,来自4,4,4 4,4,7 4,4,9 4,7,4 4,7,7 4,7,9 4,9,4 4,9,7 4,9,9 etc 的{​​{1}}函数不会引发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;

在出现提示时提供输入。

或使用PL / SQL块

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;