Oracle 如何计算两列中的行数?

Oracle 如何计算两列中的行数?,oracle,plsql,Oracle,Plsql,我尝试创建一个函数login,它从同一个表中获取客户编号(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 se

我尝试创建一个函数login,它从同一个表中获取客户编号(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;

注释中未建议的代码还有另一个问题,来自
选择进入
计数
函数不会引发
未找到数据
异常。您可以在计数时使用
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;
现在,就调用过程而言,有各种选项可用,包括使用bind变量

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

显示用于调用函数的代码。从dual;中选择logga_in(p_pnr,p_passwd)。这是你的问题。列不存在于
dual
中。那么我如何测试它?如何执行此选择?如果在某些plsql代码中使用它,则可以使用带有值的局部变量。