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