实验四oracle对象管理及使用.docx
《实验四oracle对象管理及使用.docx》由会员分享,可在线阅读,更多相关《实验四oracle对象管理及使用.docx(18页珍藏版)》请在冰点文库上搜索。
实验四oracle对象管理及使用
实验四oracle对象管理及使用
一、实验目的及要求
掌握Oracle的常用对象的操作方法。
会使用常用对象解决一些实际问题。
二、实验主要内容
(1)表结构的建立、修改、查看、删除操作。
(2)索引的建立、修改、查看、删除操作。
(3)视图的建立、查询、修改、删除操作。
(4)同义词的建立、查询、修改、删除操作,比较对同义词的操作与对原数据库对象的操作是否一致。
(5)掌握序列的建立、查询、修改、删除操作,利用序列向数据库表中插入数据。
三、实验仪器设备
在局域网环境下,有一台服务器和若干台客户机。
服务器成功安装Oracle11g数据库服务器(企业版),客户机成功安装Oracle11g客户端软件,网络服务配置正确,数据库和客户端正常工作。
四、实验步骤
表的操作
1.创建表结构
利用命令行方式将下列各表建立到员工医疗保险系统数据库中。
表结构如附录员工医疗保险系统表1-表7所示。
SQL>/*======创建企业(business)表======*/
SQL>createtablebusiness(
2bnochar(10)primarykey,
3bnamechar(50)notnull,
4btypechar(4)constraintCK_1check(btypein('企业','事业','私有')),
5baddresschar(20),
6btelchar(13)
7);
表已创建。
SQL>/*======创建医院(hospital)表======*/
SQL>createtablehospital(
2hnochar(5)primarykey,
3hnamechar(40)notnull,
4haddresschar(60)
5);
表已创建。
SQL>/*======创建医保卡(card)表======*/
SQL>createtablecard(
2cnochar(15)primarykey,
3ctypechar(4)constraintCK_2check(ctypein('企业','事业','灵活就业')),
4cmoneynumber(7,2)notnull
5);
表已创建。
SQL>/*======创建员工(staff)表======*/
SQL>createtablestaff(
2snochar(5)primarykey,
3snamechar(20)notnull,
4ssexchar
(2)check(ssexin('男','女')),
5sbirthdaydate,
6saddresschar(20),
7stelchar(15)unique,
8cnochar(15)referencescard(cno),
9bnochar(10)referencesbusiness(bno)
10);
表已创建。
SQL>/*======创建就诊表(see)======*/
SQL>createtablesee(
2snochar(5)referencesstaff(sno),
3hnochar(5)referenceshospital(hno),
4sdatedate,
5constraintS_PKprimarykey(sno,hno,sdate)
6);
表已创建。
SQL>/*======创建消费表(consume)======*/
SQL>/*======创建消费表(insurance)======*/
SQL>createtableinsurance(
2idatedate,
3cnochar(15)referencescard(cno),
4imoneynumber(5,2)notnull,
5bnochar(10)referencesbusiness(bno),
6constraintI_PKprimarykey(idate,cno)
7);
表已创建。
SQL>/*======创建消费表(consume)======*/
SQL>createtableconsume(
2cnochar(15)referencescard(cno),
3hnochar(5)referenceshospital(hno),
4csdatedatenotnull,
5mnamechar(20),
6mnumintnotnull,
7csmoneynumber(7,2)notnull,
8constraintC_PKprimarykey(cno,hno,csdate)
9);
表已创建。
2.查看表结构
利用SQL*Plus或iSQL*Plus从数据字典DBA_TAB_COLUMNS查看员工医疗保险系统所有表的字段信息。
SELECTTABLE_NAME,COLUMN_NAME,DATA_TYPE
FROMDBA_TAB_COLUMNS
WHERETABLE_NAMEIN('BUSINESS','CARD','STAFF','CONSUME','HOSPITAL','SEE','INSURANCE');
利用SQL*Plus或iSQL*Plus从数据字典DBA_CONSTRAINTS查看员工医疗保险系统所有表的约束信息。
SELECTCONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME
FROMDBA_CONSTRAINTS
WHERETABLE_NAMEIN('BUSINESS','CARD','STAFF','CONSUME','HOSPITAL','SEE','INSURANCE');
3.删除表结构
利用SQL*Plus或iSQL*Plus删除员工表3,看能否成功。
从原理上解释原因,同时记录外键约束表删除顺序的影响。
DROPTABLESTAFF;
索引操作
1.创建索引
利用SQL*Plus或iSQL*Plus为医院表的医院名称创建索引,并以降序排列,索引名为“hospital_name_index”。
createindexhospital_name_indexonhospital(hnamedesc);
2.查看索引
利用SQL*Plus或iSQL*Plus从DBA_INDEXES数据字典中查看员工医疗保险系统所有索引的信息。
selectindex_name,index_type,table_name
fromDBA_INDEXES
wheretable_namein('BUSINESS','CARD','SEE','STAFF','CONSUME','HOSPITAL','INSURANCE');
3.删除索引
利用SQL*Plus或iSQL*Plus将“hospital_name_index”索引删除。
DROPINDEXhospital_name_index;
视图操作
1.创建视图
利用SQL*Plus或iSQL*Plus为实现显示医保卡信息创建视图,该视图中包括医保卡信息、医保卡所属人信息和所属人单位信息,视图名为“ygbx_card_view”。
createorreplaceviewygbx_card_viewasselecto,c.ctype,c.cmoney,b.bno,b.bname,s.sno,s.sname,s.ssex,s.saddress,s.stel
fromcardc,staffs,businessb
whereo=oands.bno=b.bno
2.查看视图
利用SQL*Plus或iSQL*Plus查看“ygbx_card_view”视图的信息。
select*fromygbx_card_view;
3.删除视图
利用SQL*Plus或iSQL*Plus删除“ygbx_card_view”视图。
dropviewygbx_card_view;
同义词操作
1.创建同义词
利用SQL*Plus或iSQL*Plus创建企业表同义词,名为“qyb”。
CREATESYNONYMqybFORBUSINESS;
2.查询同义词
利用SQL*Plus或iSQL*Plus查看同义词“qyb”。
SELECT*FROMQYB;
3.删除同义词
利用SQL*Plus或iSQL*Plus删除同义词“qyb”。
DROPSYNONYMQYB;
序列操作
1.创建序列
利用SQL*Plus或iSQL*Plus创建序列,该序列最大值为“28000”,最小值为“60”,步长为“1”,可循环,序列名为“ygbx_seq1”。
createsequenceygbx_seql
maxvalue28000
minvalue60
incrementby1
cycle;
2.查询序列
利用SQL*Plus或iSQL*Plus查看序列“ygbx_seq1”。
selectygbx_seql.currvalfromdual;
3.修改序列
利用SQL*Plus或iSQL*Plus修改序列“ygbx_seq1”,将该序列最大值设为“82000”,最小值设为“100”,步长设为“5”。
altersequenceygbx_seql
maxvalue82000
minvalue59
incrementby5;
4.删除序列
利用SQL*Plus或iSQL*Plus删除序列“ygbx_seq1”。
dropsequenceygbx_seql;
主要算法和程序清单
SQL>/*======创建企业(business)表======*/
SQL>createtablebusiness(
2bnochar(10)primarykey,
3bnamechar(50)notnull,
4btypechar(4)constraintCK_1check(btypein('企业','事业','私有')),
5baddresschar(20),
6btelchar(13)
7);
表已创建。
SQL>/*======创建医院(hospital)表======*/
SQL>createtablehospital(
2hnochar(5)primarykey,
3hnamechar(40)notnull,
4haddresschar(60)
5);
表已创建。
SQL>/*======创建医保卡(card)表======*/
SQL>createtablecard(
2cnochar(15)primarykey,
3ctypechar(4)constraintCK_2check(ctypein('企业','事业','灵活就业')),
4cmoneynumber(7,2)notnull
5);
表已创建。
SQL>/*======创建员工(staff)表======*/
SQL>createtablestaff(
2snochar(5)primarykey,
3snamechar(20)notnull,
4ssexchar
(2)check(ssexin('男','女')),
5sbirthdaydate,
6saddresschar(20),
7stelchar(15)unique,
8cnochar(15)referencescard(cno),
9bnochar(10)referencesbusiness(bno)
10);
表已创建。
SQL>/*======创建就诊表(see)======*/
SQL>createtablesee(
2snochar(5)referencesstaff(sno),
3hnochar(5)referenceshospital(hno),
4sdatedate,
5constraintS_PKprimarykey(sno,hno,sdate)
6);
表已创建。
SQL>/*======创建消费表(consume)======*/
SQL>/*======创建消费表(insurance)======*/
SQL>createtableinsurance(
2idatedate,
3cnochar(15)referencescard(cno),
4imoneynumber(5,2)notnull,
5bnochar(10)referencesbusiness(bno),
6constraintI_PKprimarykey(idate,cno)
7);
表已创建。
SQL>/*======创建消费表(consume)======*/
SQL>createtableconsume(
2cnochar(15)referencescard(cno),
3hnochar(5)referenceshospital(hno),
4csdatedatenotnull,
5mnamechar(20),
6mnumintnotnull,
7csmoneynumber(7,2)notnull,
8constraintC_PKprimarykey(cno,hno,csdate)
9);
表已创建。
SELECTTABLE_NAME,COLUMN_NAME,DATA_TYPE
FROMDBA_TAB_COLUMNS
WHERETABLE_NAMEIN('BUSINESS','CARD','STAFF','CONSUME','HOSPITAL','SEE','INSURANCE');
SELECTCONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME
FROMDBA_CONSTRAINTS
WHERETABLE_NAMEIN('BUSINESS','CARD','STAFF','CONSUME','HOSPITAL','SEE','INSURANCE');
DROPTABLESTAFF;
createindexhospital_name_indexonhospital(hnamedesc);
selectindex_name,index_type,table_name
fromDBA_INDEXES
wheretable_namein('BUSINESS','CARD','SEE','STAFF','CONSUME','HOSPITAL','INSURANCE');
DROPINDEXhospital_name_index;
createorreplaceviewygbx_card_viewasselecto,c.ctype,c.cmoney,b.bno,b.bname,s.sno,s.sname,s.ssex,s.saddress,s.stel
fromcardc,staffs,businessb
whereo=oands.bno=b.bno
select*fromygbx_card_view;
dropviewygbx_card_view;
CREATESYNONYMqybFORBUSINESS;
SELECT*FROMQYB;
DROPSYNONYMQYB;
createsequenceygbx_seql
maxvalue28000
minvalue60
incrementby1
cycle;
selectygbx_seql.currvalfromdual;
altersequenceygbx_seql
maxvalue82000
minvalue59
incrementby5;
dropsequenceygbx_seql
疑难小结:
本次实验中只要多锻炼,记住语法就太大问题,需要注意的是在建表的时候主键/外键的相互引用,另外关键字必须记清楚,这就要求要经常锻炼。
附录:
员工医疗保险系统表
表1企业(business)表结构
表2医院(hospital)表结构
表3医保卡(card)表结构
表4员工(staff)表结构
表5就诊表(see)结构
表6消费(consume)表结构
表7医保(insurance)表结构