Oracle 函数PL/SQL不支持';不返回任何值

Oracle 函数PL/SQL不支持';不返回任何值,oracle,plsql,oracle11g,Oracle,Plsql,Oracle11g,我有下一个PL/SQL代码: create or replace FUNCTION NUMBER_PLATES (name VARCHAR2) RETURN INT IS num_plates INT; BEGIN SELECT count(*) INTO num_plates FROM plate p, detail_ped dt WHERE dt.plate = p.cod_plate AND p.name = name; RETURN (nu

我有下一个
PL/SQL
代码:

create or replace FUNCTION NUMBER_PLATES (name VARCHAR2)
RETURN INT
IS

    num_plates INT;

BEGIN

    SELECT count(*) INTO num_plates
    FROM plate p, detail_ped dt
    WHERE dt.plate = p.cod_plate AND p.name = name;

    RETURN (num_plates);

EXCEPTION
    WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('ERROR');

END NUMBER_PLATES;
下一步是将函数执行为SQL命令:

DECLARE a INT;
BEGIN
    a := NUMBER_PLATES('chicken');
    DBMS_OUTPUT.PUT_LINE(a);
END;
但函数在实际值为3时返回0

我做错了什么

如果我执行我的
SQL
语句,则返回3:

    SELECT count(*)
    FROM plate p, detail_ped dt
    WHERE dt.plate = p.cod_plate AND p.name = 'chicken';

应重命名参数名称以避免名称冲突:

create or replace FUNCTION NUMBER_PLATES (p_name VARCHAR2)
RETURN INT
IS
    num_plates INT;
BEGIN

    SELECT count(*) INTO num_plates
    FROM plate p
    JOIN detail_ped dt                 -- proper JOIN syntax
      ON dt.plate = p.cod_plate
    WHERE p.name = p_name;

    RETURN (num_plates);
-- exception is dead code, COUNT(*) will return 0 if no records found
-- EXCEPTION
--    WHEN NO_DATA_FOUND THEN
--    DBMS_OUTPUT.PUT_LINE('ERROR');
END NUMBER_PLATES;
/