即使没有匹配的记录,函数也会返回1

时间:2019-03-03 06:59:59

标签: oracle oracle10g

我在包装上具有以下功能。针对不匹配的记录运行该函数时,结果始终为1。

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

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;

1 个答案:

答案 0 :(得分:3)

请尝试更改您的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将使用哪些规则来解决您当前的情况,但是即使可以使之起作用,也最好避免使用它。