Я собираюсь предложить что-то совершенно другое здесь. Такой подход обречен на провал, как только ваше приложение выходит «в дикую природу».
Допустим, ваше приложение пользуется огромным успехом, и теперь у вас есть десятки людей, которые используют его одновременно, и давайте предположим, что в настоящее время 1000 - это самый высокий номер отдела.
Теперь у нас примерно 20 человек, которые в одно и то же время делают:
SELECT MAX(department_id)
INTO max_dept
FROM departments;
Они получат все в результате 1000, они все затем попытаются вставить 1010 в таблицу. Тогда произойдет одна из двух вещей
a) все, кроме одного, получат ошибку из-за нарушения первичного ключа,
б) у вас будет несколько строк, все с dept = 1010
Любой из них, очевидно, не велик. Вот почему у нас есть вещь, называемая последовательностью, которая может гарантировать вам уникальные значения. Вы просто делаете:
create sequence DEPT_SEQ;
и затем вставьте:
INSERT INTO departments (department_id,department_name,location_id)
VALUES(dept_seq.nextval,dept_name,NULL);
Существуют еще более простые механизмы (в Google это означает «колонка идентификации оракула»), но это безропотно объясняет путь вперед и избавит вас от проблем с вашим текущим подходом.