Oracle数据库张卫东.docx
《Oracle数据库张卫东.docx》由会员分享,可在线阅读,更多相关《Oracle数据库张卫东.docx(17页珍藏版)》请在冰豆网上搜索。
![Oracle数据库张卫东.docx](https://file1.bdocx.com/fileroot1/2023-2/7/cb9482ee-8047-4de3-b3e0-6ef098201da9/cb9482ee-8047-4de3-b3e0-6ef098201da91.gif)
Oracle数据库张卫东
实验报告
课程名称:
《Oracle实用教程》
实验地点:
行勉楼A305
专业班级:
软件1319班学号:
2013005655
学生姓名:
张卫东
指导教师:
赵晋明
2016年5月5日
专
业
软件工程
班级
软件1319班
学
号
2013005655
成绩
姓
名
张卫东
周次
第九周
日
期
2016.4.26
实验
教室
行勉楼A305
题目
实验一、创建数据库和表
目的
要求
(1)了解数据库的结构以及一些基本概念。
(2)了解表的结构特点。
(3)了解Oracle11g的基本数据类型。
(4)学会使用SQL语句手工创建表。
(5)学会使用SQL语句创建表。
仪器
用具
1.HP242G1笔记本win764位系统
2.Oracle11g大型数据库及其相应的配套软件
实验
原理
(1)明确能够创建数据库的的用户必须是系统管理员,或是被授权使用CREATEDATABASE语句的用户。
(2)创建数据库必须确定数据库名、所有者(即创建数据库的用户)、数据库大小、SGA分配和存储数据库的文件。
(3)确定数据库包含哪些表以及所包含的各表的结构,还要了解Orcle11g的常用数据类型,以创建数据库的表。
(4)了解两种常用的创建数据库、表的方法,即利用DBCA创建和使用PL/SQL的CREATEDATABASE语句创建。
实
验
内
容
实
验
内
容
1.在scott用户中创建表
(1)Employees(员工信息表)表
createtableEmployees
(
EmployeeIDchar(6)primarykey,
Namechar(10)notnull,
Birthdaydatenotnull,
Sexnumber
(1)notnull,
Addresschar(20),
Zipchar(6),
PhoneNumberchar(12),
DepartmentIDchar(3)notnull
);
查看创建后的Employees表
(2)Departments(部门信息)表
createtableDepartments
(
DepartmentIDchar(3)primarykey,
DepartmentNamechar(20)notnull,
Notevarchar2(100)
);
查看创建后的Departments表
(3)Salary(员工薪水情况)表
createtableSalary
(
EmployeeIdchar(6)primarykey,
InComenumber(8,2)notnull,
OutComenumber(8,2)notnull
);
查看创建后的Salary表
心得体会
通过本次的实验,学会了数据库的一些基本操作,数据库的基本概念,以及学会SQL语句创建表
专
业
软件工程
班级
软件1319班
学
号
2013005655
成绩
姓
名
张卫东
周次
第九周
日
期
2016.4.28
实验
教室
行勉楼A305
题目
实验二、表数据的插入、修改和删除
目的
要求
(1)学会使用PL/SQL语句对数据库表进行插入、修改和删除数据的操作。
(2)学会使用SQLDeveloper对数据库表进行插入、修改和删除数据的操作。
(3)了解数据更新操作时要注意数据完整性。
(4)了解PL/SQL语句对表数据操作的灵活控制功能。
仪器
用具
1.HP242G1笔记本win764位系统
2.Oracle11g大型数据库及其相应的配套软件
实验
原理
(1)对表数据的插入、删除、修改都属于表数据的更新,对表数据的操作可以在SQLDeveloper中进行,也可以有PL/SQL语句实现。
(2)PL/SQL中用于对表数据进行插入、修改和删除的命令分别是INSERT/UPDATE和DELETE(或TRANCATETABLE)
(3)使用PL/SQL语句在对表数据进行插入、修改及删除时,比在SQLDevelop中操作表数据更灵活,功能更强大、
实
验
内
容
实
验
内
容
实
验
内
容
向表中插入数据
(1)在Employees表中插入数据
insertintoemployeesvalues('000001','王林',to_date('19960123','YYYYMMDD'),1,'中山路32',210003,83355668,2);
insertintoemployeesvalues('010008','伍荣华',to_date('19760123','YYYYMMDD'),1,'北京东路',210001,83321321,1);
insertintoemployeesvalues('020010','王向荣',to_date('19821209','YYYYMMDD'),1,'四牌楼',210006,83792361,1);
insertintoemployeesvalues('020018','李丽',to_date('19600730','YYYYMMDD'),0,'中山东路',210002,83413301,1);
insertintoemployeesvalues('102201','刘明',to_date('19721018','YYYYMMDD'),1,'虎踞路',210013,83606608,5);
insertintoemployeesvalues('102208','朱俊',to_date('19650928','YYYYMMDD'),1,'牌楼巷',210004,84708817,5);
insertintoemployeesvalues('108991','钟敏',to_date('19790810','YYYYMMDD'),0,'中山路10',210003,83346722,3);
insertintoemployeesvalues('111006','张石兵',to_date('19741001','YYYYMMDD'),1,'解放路',210010,84563418,5);
insertintoemployeesvalues('210678','林涛',to_date('19770402','YYYYMMDD'),1,'中山北路',210008,83467336,3);
insertintoemployeesvalues('302566','李玉珉',to_date('19680920','YYYYMMDD'),1,'热河路',210001,58765991,4);
insertintoemployeesvalues('308759','叶凡',to_date('19781118','YYYYMMDD'),1,'北京西路',210002,83308901,4);
insertintoemployeesvalues('504209','陈林琳',to_date('19690903','YYYYMMDD'),1,'汉中路',210018,84468158,4);
查看插入数据后的Employees表
(2)在Departments表中插入数据
insertintoDepartmentsvalues('1','财务部','null');
insertintoDepartmentsvalues('2','人力资源部','null');
insertintoDepartmentsvalues('3','经理办公室','null');
insertintoDepartmentsvalues('4','研发部','null');
insertintoDepartmentsvalues('5','市场部','null');
查看插入数据后的Departments表
(3)在Salary表中插入数据
insertintoSalaryvalues('000001',2100.8,123.09);
insertintoSalaryvalues('010008',1582.62,88.03);
insertintoSalaryvalues('102201',2569.88,185.65);
insertintoSalaryvalues('111006',1987.01,79.58);
insertintoSalaryvalues('504209',2066.15,108.0);
insertintoSalaryvalues('302566',2980.7,210.2);
insertintoSalaryvalues('108991',3259.98,281.52);
insertintoSalaryvalues('020010',2860.0,198.0);
insertintoSalaryvalues('020018',2347.68,180.0);
insertintoSalaryvalues('308759',2531.98,199.08);
insertintoSalaryvalues('210678',2240.0,121.0);
insertintoSalaryvalues('102208',1980.0,100.0);
查看插入数据后的Salary表
3.在表中修改数据
例如:
修改表Salary中某个记录的字段值
updateSalarysetINCOME=2890.5whereEmployeeID='000001';
查看修改后的数据
4.在表中删除数据
例如:
删除表Salary中一行记录
deletefromSalarywhereEmployeeID='000001';
查看删除后的数据
心得体会
通过本次实验,我基初步学会了如何使用PL/SQL语句对数据库表进行插入、修改和删除数据的操作,学会了用SQLDEVELOPER对数据库表进行插入、修改和删,实验过程中通过摸索,学会了基本的操作。
专
业
软件工程
班级
软件1319班
学
号
2013005655
成绩
姓
名
张卫东
周次
第十周
日
期
2016.5.3
实验
教室
行勉楼A305
题目
实验五、PL/SQL编程
目的
要求
(1)进一步巩固第二章到第四章所学的内容。
(2)掌握变量的分类及其使用。
(3)掌握各种运算符的使用。
(4)掌握各种控制语句的使用。
(5)掌握系统函数及用户自定义函数的使用。
仪器
用具
(1)HP242G1笔记本win764位系统
(2)Oracle11g大型数据库及其相应的配套软件
实验
原理
(1)PL/SQL支持各种基本数据类型。
(2)PL/SQL支持各种运算符、控制语句的功能和使用方法。
(3)PL/SQL支持自定义函数的使用。
实
验
内
容
实
验
内
容
1、自定义函数的使用
(1)定义一个函数实现如下功能。
对于一个给定的DepartmentID值,查询该值在
departments表中是否存在,若存在返回0,否则返回-1。
createorreplacefunctioncheck_id(departmentinchar)
returnnumber
as
numnumber;
xnumber;
begin
selectcount(*)intox
fromdepartments
whereDepartmentID=departmentid;
ifx>0then
num:
=0;
else
num:
=-1;
endif;
return(num);
end;
(2)写一段PL/SQL脚本程序调用上述函数。
当向employees表插入一条记录时,首先调用函数CHECK_ID检索该记录的departmentid值在表departments的departmentid字段中是否存在对应的值,若存在,则该记录插入employees表。
declare
numnumber;
begin
num:
=check_id('2');
ifnum=0then
insertintoemployeesvalues('990210','张文',to_date('19820324','YYYYMMDD'),0,'镇江路','210009','3497534',2);
endif;
end;
“张文”记录插入成功,如下:
心得体会
通过本次的实验,结合第二章和第四章的内容,学会了变量的分类、运算符、控制语句的使用,在做实验过程中探索其中的道理。
专
业
软件工程
班级
软件1319班
学
号
2013005655
成绩
姓
名
张卫东
周次
第十周
日
期
2016.5.5
实验
教室
行勉楼A305
题目
实验六、存储过程和触发器的使用
目的
要求
(1)掌握存储过程的使用方法。
(2)掌握触发器的使用方法。
仪器
用具
1.HP242G1笔记本win764位系统
2.Oracle11g大型数据库及其相应的配套软件
实验
原理
触发器的使用
(1)创建触发器
向Employees表中插入或修改一条记录时,通过触发器检查记录的值在Departments表是否存在,若不存在,则取消插入或修改操作。
(2)修改Departments表的DepartmentID字段值时,该字段在Employees表中的对应值也做相应的修改。
(3)删除Departments表中一条记录的同时,也删除该记录DepartmentID字段值在Employees表中对应的记录。
3、存储过程
(1)添加职员记录的存储过EmployeeADD。
(2)修改职员记录的存储过程EmployeeUPDATE。
(3)调用存储过程 。
实
验
内
容
实
验
内
容
实
验
内
容
实
验
内
容
实
验
内
容
触发器的使用
(1)创建触发器
向Employees表中插入或修改一条记录时,通过触发器检查记录的值在Departments表是否存在,若不存在,则取消插入或修改操作。
CREATEORREPLACETRIGGEREmployeesIns
AFTERINSERTORUPDATEONEmployeesFOREACHROW
DECLARE
numnumber;
BEGIN
SELECTCOUNT(*)INTOnum
FROMDepartments
WHEREDepartmentID=:
NEW.DepartmentID;
IFnum=0THEN
DBMS_OUTPUT.PUT_LINE('职员所在部门不存在');
ENDIF;
END;
(2)修改Departments表的DepartmentID字段值时,该字段在Employees表中的对应值也做相应的修改。
CREATEORREPLACETRIGGERDepartmentsUpdate
AFTERUPDATEONDepartmentsFOREACHROW
BEGIN
IFUPDATINGTHEN
UPDATEEmployees
SETDepartmentID=:
NEW.DepartmentID
WHEREDepartmentID=:
OLD.DepartmentID;
ENDIF;
END;
(3)删除Departments表中一条记录的同时,也删除该记录DepartmentID字段值在Employees表中对应的记录
CREATEORREPLACETRIGGERDepartmentsDelete
AFTERDELETEONDepartmentsFOREACHROW
BEGIN
DELETEFROMEmployees
WHEREDepartmentID=:
OLD.DepartmentID;
END;
3、存储过程
(1)添加职员记录的存储过EmployeeADD。
CREATEORREPLACEPROCEDUREEmployeeAdd
(
employeeidINchar,
nameINchar,
birthdayINdate,
sexINnumber,
addressINchar,
zipINchar,
phonenumberINchar,
departmentIDINchar
)
AS
BEGIN
INSERTINTOEmployeesVALUES(employeeid,name,birthday,sex,address,zip,phonenumber,departmentID);
END;
(2)修改职员记录的存储过程EmployeeUPDATE。
CREATEORREPLACEPROCEDUREEmployeeUpdate
(old_idINchar,new_idINchar,new_nameINchar,new_birthdayINdate,
new_sexINnumber,new_addressINchar,new_zipINchar,new_phonenumberINchar,
new_departmentIDINchar
)
AS
BEGIN
UPDATEEmployees
SETEmployeeID=new_id,
Name=new_name,
Sex=new_sex,
Address=new_address,
Zip=new_zip,
Phonenumber=new_phonenumber,
DepartmentID=new_departmentID
WHEREEmployeeID=old_id;
commit;
END;
(3)删除职员记录的存储过程EmployeeDelete。
CREATEORREPLACEPROCEDUREEmployeeDelete(idINchar)
AS
BEGIN
DELETEFROMEmployees
WHEREEmployeeID=id;
COMMIT;
end;
4、调用存储过程
(1)EXECEmployeeAdd('990230','刘朝',TO_DATE('19890909','YYYYMMDD'),1,'武汉小洪山',null,null,3);
查询Employees表,可看到数据已插入成功:
(2)
EXECEmployeeUpdate('990230','990232','刘平',TO_DATE('19890909','YYYYMMDD'),1,'武汉小洪山',null,null,'2');
查询Employees表,可看到数据已更新成功:
(3)EXECEmployeeDelete('990232');
查询Employees表,可看到数据已删除成功:
心得体会
通过本次的实验初步掌握了存储过程和触发器的使用,虽然在实验过程中有时候出错,但是依然学到了很多知识。