【发布时间】:2014-12-05 04:02:14
【问题描述】:
说明:
创建两个表,分别命名为 employees 和 departments。在表格名称前加上您的姓名首字母。通过名为 dept 的列链接两个表(外键)。为每个表组成几个列名。
员工表:
create table bsemployees(
dept number primary key,
empName varchar2(20),
salary number
);
部门表:
create table bsdepartments(
dept number references bsemployees(dept),
deptName varchar2(20)
);
编写以下存储过程:
• 在employees 表中插入一行。如果部门不存在。将其插入到 departments 表中。
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;
/
除了当我尝试在 departments 表中插入一行时,我得到了完整性约束 - 找不到父键错误。
如果我执行execute sp_employees(5, 'John Doe', 90000);,它将显示***DEPT DOES NOT EXIST***,并将继续将数据插入bsemployees,并将部门#插入bsdepartments 和 deptName 将根据我的 if-then 语句留空。执行 select(*) 会显示这一点。
但是,如果我继续执行 execute sp_departments(1, 'human resources'); 将一行放入 departments,我会收到父键错误。我了解我正在尝试插入一些没有父键但我不知道如何修复它的内容。
【问题讨论】: