Oracle 如何计算两列中的行数?
我尝试创建一个函数login,它从同一个表中获取客户编号(pnr)和密码。创建函数很好,但测试会因以下错误而崩溃: ORA-00904:“P_PASSWD”:无效标识符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
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代码中使用它,则可以使用带有值的局部变量。