Функция PL / SQL не возвращает никакого значения - PullRequest
1 голос
/ 28 апреля 2019

У меня есть следующий 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;

Но функция возвращает мне 0, когда на самом деле 3.

Что я делаю не так?

Если я выполню мое предложение SQL, то вернется 3:

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

1 Ответ

1 голос
/ 28 апреля 2019

Вы должны переименовать имя параметра, чтобы избежать конфликта имен:

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;
/

db <> fiddle demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...