函数 returns 1 即使没有匹配的记录

Function returns 1 even when there's not matching record

我在一个包上有以下功能。当运行ning那个针对不匹配记录的函数时,结果总是1。

这就是我 运行 函数并在 DBMS 输出中查看输出的方式 window

set serveroutpuut on;
begin
    dbms_output.put_line (BP$BUSINESSPARNTNER_CODE.Check_rec('44887'));
end;

这是负责查询和统计记录的函数

   FUNCTION Check_rec(PartnerNumber IN VARCHAR2) RETURN NUMBER IS v_count NUMBER;
   BEGIN
        select count(PartnerNumber) into v_count from BusinessPartner where PartnerNumber = PartnerNumber and code is not null;
        RETURN v_count;
   END;

我已经尝试 运行 硬编码值并且有效

FUNCTION Check_rec(PartnerNumber IN VARCHAR2) RETURN NUMBER IS v_count NUMBER;
       BEGIN
            select count(PartnerNumber) into v_count from BusinessPartner where PartnerNumber = '44887' and code is not null;
            RETURN v_count;
       END;

请尝试更改 IN 参数的名称,使其与列名不冲突:

FUNCTION Check_rec(pn IN VARCHAR2) RETURN NUMBER IS v_count NUMBER;
BEGIN
    SELECT COUNT(PartnerNumber) INTO v_count
    FROM BusinessPartner
    WHERE PartnerNumber = pn AND code IS NOT NULL;
    RETURN v_count;
END;

我不知道 Oracle 会使用哪些规则来解决您当前的情况,但即使它可以工作,最好还是避免它。