說明: 甲骨文 - 插入存儲過程外鍵
創建兩個表,一個名爲員工和部門。在您的姓名首字母前加上表格名稱。通過名爲Dept的列鏈接兩個表(外鍵)。爲每個表組成幾個列名。
員工表:
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並插入部門#爲bsdepartments和DEPTNAME將根據留空我的if-then聲明。做一個選擇(*)顯示我這一點。
但是,如果我繼續前進,做execute sp_departments(1, 'human resources');
放置一行到部門我得到的父項錯誤。我知道我試圖插入沒有父鍵的東西,但我不知道如何解決它。