Отсутствует предложение WHERE
, чтобы проверить, существует ли этот идентификатор, поэтому он возвращает несколько строк, которые не может содержать одна статическая переменная float_checker
.
Другая проблема состоит в том, что, если у вас нет записи в таблице, ваш оператор выбора завершится ошибкой с исключением no_data_found
.
Итак, определите ваш float_checker
по-другому, чтобы он сохранил счет.
Далее, ваш INSERT
должен следовать после условия IF
CREATE OR REPLACE PROCEDURE insert_num_proc (
float_id_param float_sample.float_id%TYPE,
float_value_param float_sample.float_value%TYPE
) AS
float_checker INTEGER := 0;
BEGIN
SELECT COUNT(*)
INTO float_checker
FROM float_sample WHERE
float_id = float_id_param; --where clause for the passed id.
IF float_checker > 0
THEN
raise_application_error(-20001,'Duplicate value is inserted.');
END IF;
INSERT INTO float_sample (
float_id,
float_value
) VALUES (
float_id_param,
float_value_param
);
END;
/
Так как это упражнение, можно использовать этот код.Но в сценарии реального времени 3-е требование должно обрабатываться UNIQUE CONSTRAINT
в таблице.