Инструкции: Oracle - Вставка хранимая процедура FOREIGN KEY
создать две таблицы, названные сотрудники и отделы. Представьте имена таблиц с вашими инициалами. Свяжите две таблицы (внешний ключ) колонкой под названием отдел. Составьте несколько имен столбцов для каждой таблицы.
Сотрудники Таблица:
create table bsemployees(
dept number primary key,
empName varchar2(20),
salary number
);
Отделы Таблица:
create table bsdepartments(
dept number references bsemployees(dept),
deptName varchar2(20)
);
Написать следующие хранимые процедуры:
• вставить строку в сотрудников таблицы. Если отдел не существует. Вставьте его в отделов стол.
create or replace procedure sp_employees(
a_dept IN number,
a_empName IN varchar2,
a_salary IN number
)
as
vCount number;
BEGIN
sp_check_dept(a_dept,vCount);
insert into bsemployees values(a_dept, a_empName, a_salary);
if vCount = 0 then
dbms_output.put_line('**DEPT DOES NOT EXIST**');
insert into bsdepartments (dept, deptName) values(a_dept, NULL);
end if;
END;
/
create or replace procedure sp_check_dept(
a_dept IN number,
vCount OUT number
)
as
BEGIN
select count(*)
into vCount
from bsdepartments
where dept = a_dept;
end;
/
• Вставьте строку в таблицу отделов.
create or replace procedure sp_departments(
a_dept IN number,
a_deptName IN varchar2
)
as
BEGIN
insert into bsdepartments values(a_dept, a_deptName);
END;
/
Я получил это в значительной степени все вниз для этого задания за исключением того, что, когда я пытаюсь вставить строку в отделов таблицы я получаю ограничение целостности - родительский ключ не найден ошибка.
Если я execute sp_employees(5, 'John Doe', 90000);
Он будет отображать ***DEPT DOES NOT EXIST***
и будет идти вперед и вставить данные в bsemployees и вставьте DEPT # в bsdepartments и DEPTNAME останется пустым на основе моего если-то заявление. Выполнение select (*) показывает мне это.
Однако если я иду вперед и делать execute sp_departments(1, 'human resources');
поместить строку в отделов я получаю ошибку клавишного родителя. Я понимаю, что я пытаюсь вставить что-то, у которого нет родительского ключа, но я не знаю, как его исправить.