проверить, существует ли в таблице значение функции оракула, заданное в качестве параметра - PullRequest
0 голосов
/ 10 октября 2019

Моя таблица выглядит следующим образом

Teacher(ID, Name, Surname)

Я хочу дать пользователю вывод.

Если идентификатор, указанный в качестве параметра функции, не существует в столбце идентификатора в таблице.

Как я могу обработать это внутри функции и выдать вывод: «Запрошенный идентификатор отсутствует в таблице»

Create or replace function subjects
(
 code_value  IN Teacher.ID % TYPE
)

RETURN NUMBER

IS
id_value NUMBER

BEGIN

SELECT id 
INTO id_value
FROM TEACHER
WHERE ID = code_value

END

END subjects;


1 Ответ

0 голосов
/ 10 октября 2019

С функцией, которую вы написали, вы не можете - она ​​возвращает NUMBER, а желаемый результат - строка (VARCHAR2).

Существует способ - написать обработчик исключения, которыйбудет выполняться, когда select, который вы написали, ничего не вернет, так как это вызовет NO_DATA_FOUND, поэтому:

begin
  select ...

exception
  when no_data_found then
    raise_application_error(-20000, 'The id asked is not present in the table');
end;

Это приведет к остановке вашей программы (возникает ошибка, верно?)поэтому - если вы хотите двигаться дальше, либо

  • измените тип возвращаемых данных, либо
  • переключитесь на процедуру, которая будет иметь параметр OUT (или два - один для идентификатора,другое для возможного сообщения об ошибке). Недостаток (процедуры) в том, что вы не можете использовать его в SELECT инструкциях, но вам понадобится фрагмент кода PL / SQL.
...