Oracle实验一 :熟悉ORACLE环境并练习SQL操作

版权声明:@YDDUONG https://blog.csdn.net/y_dd6011/article/details/86156812

一、实验内容

        1.建立用户c##u_j432,密码为:p123789,并完成相关操作

        2.定义基本表格t_major_j432(专业)与t_stud_j432(学生),关系模式如下:

t_major_j432(

       MNO专业编号 Primary key,

       MNAME 专业名称,

       loc 地址 in(主校区,南校区,新校区,铁道校区,湘雅校区),

       mdean 专业负责人))

t_stud_j432(SNO primary key,

       SNAME,

       SEX (男,女,其它,其他),

       TEL ,E-MAIL (基本格式判断),

扫描二维码关注公众号,回复: 4880709 查看本文章

       birthday >=’19990731’ ,

       MNO 班长学号  fk,

       MajorNo 专业编号 fk ),

其中MajorNo 专业编号为学号的第3,4位。

        3.插入样本数据:

插入3个专业的6个班级,如:计算机科学与技术,物联网工程,数据科学与大数据技术,每个专业不小于10个人。

        4.测试相关的完整性约束,并注意保留出错的提示,分析出错的原因

        5.为每个学生建立相关用户,实现权限控制,每个学生可查询自己的信息,班长可查询本班所有学生信息; 为每个专业负责建立用户,每个专业负责可查询本专业所有学生信息。

二、实验源程序

--建立c##u_j432用户
system/123789
conn system/123789
drop user c##u_j432 cascade;
create user c##u_j432 identified by p123789;
grant resource,connect,dba to c##u_j432;
conn c##u_j432/p123789

--建表
create table t_major_j432(
	mno varchar2(2),--专业编号
	mname varchar2(32),
	loc varchar2(32),
	mdean varchar2(32),--专业负责人
	constraint pk_major_mno primary key(mno),
	constraint ck_major_mname check(loc in('主校区','南校区','新校区','铁道校区','湘雅校区')));
create table t_stud_j432(
	sno varchar2(10),--学生学号
	sname varchar2(32),
	sex varchar2(32),
	tel varchar2(32),
	email varchar2(32),
	birthday date,
	mno varchar2(10),--班长学号
	majorno varchar2(2),--专业编号
	constraint pk_stud_sno primary key(sno),
	constraint ck_stud_sex check(sex in('男','女','其它')),
	constraint ck_stud_email check(email like '%@%.%'),
	constraint ck_stud_birthday check(birthday>to_date('19970731','yyyymmdd')),	
	constraint ck_stud_majorno check(majorno in substr(sno,3,2)),	
	constraint fk_stud_mno foreign key(mno) references t_stud_j432(sno),
	constraint fk_stud_majorno foreign key(majorno) references t_major_j432(mno));


--测试约束
--t_major_j432约束

column mno format a3;
column mname format a32;
column loc format a10;
column mdean format a12;
column sno format a11;
column sname format a7;
column sex format a4;
column tel format a12;
column email format a32;
column birthday format a11;
column mno format a11;
column majorno format a3;
set linesize 150;
set pagesize 100;

--1.主键不为空
insert into t_major_j432(mno) values('');

--2.主键不能重复
insert into t_major_j432(mno) values('34');
insert into t_major_j432(mno) values('34');
delete from t_major_j432;

--3.约束:loc in('主校区','南校区','新校区','铁道校区','湘雅校区')
insert into t_major_j432(loc) values('北校区');

--4.成功插入几条完整数据
insert into t_major_j432 values('34','计算机科学与技术','主校区','刘逸峰');
insert into t_major_j432 values('35','大数据','主校区','刘逸峰');

select * from t_major_j432;

--t_stud_j432约束
--1.主键不为空
insert into t_stud_j432(sno) values('');

--2.主键不能重复
insert into t_stud_j432(sno) values('1234567890');
insert into t_stud_j432(sno) values('1234567890');
delete from t_stud_j432;

--3.约束:sex in('男','女','其它')
insert into t_stud_j432(sno,sex) values('1234567890','不知道');

--4.约束:email like '%@%.%'
insert into t_stud_j432(sno,email) values('1234567890','123456@789');

--5.约束:birthday>to_date('19970731','yyyymmdd')
insert into t_stud_j432(sno,birthday) values('1234567890',to_date('19951130','yyyymmdd'));

--6.约束:majorno in substr(sno,3,2)
insert into t_stud_j432(sno,majorno) values('1234567890','35');

--7.外键约束:foreign key(mno) references t_stud_j432(sno)
insert into t_stud_j432(sno,mno) values('1234567890','1234567891');

--8.外键约束:foreign key(majorno) references t_major_j432(mno)
insert into t_stud_j432(sno,majorno) values('0987654321','87');

--9.成功插入一条完整数据
insert into t_stud_j432 values('1234567890','余东','男','18790450031','[email protected]',to_date('20001130','yyyymmdd'),'1234567890','34');

select * from t_stud_j432;

--插入实验数据:3个专业6个班共计36人
delete from t_stud_j432;
delete from t_major_j432;
insert into t_major_j432 values('21','数据科学与大数据技术','主校区','张朔山');
insert into t_major_j432 values('02','计算机科学与技术','主校区','张飞宇');
insert into t_major_j432 values('19','物联网工程','主校区','申雨欣');
--数据科学与大数据技术13名同学
insert into t_stud_j432 values('0921160114','李浩汉','男','15390451131','[email protected]',to_date('20000122','yyyymmdd'),'0921160114','21');
insert into t_stud_j432 values('0921160115','李文博','男','18726450331','[email protected]',to_date('20001010','yyyymmdd'),'0921160114','21');
insert into t_stud_j432 values('0921160117','徐聪','男','13260450831','[email protected]',to_date('20001220','yyyymmdd'),'0921160114','21');
insert into t_stud_j432 values('0921160120','周文轩','男','18655450232','[email protected]',to_date('20000525','yyyymmdd'),'0921160114','21');
insert into t_stud_j432 values('0921160122','苏子淇','女','15342450031','[email protected]',to_date('20000214','yyyymmdd'),'0921160114','21');
insert into t_stud_j432 values('0921160123','张静','女','18790332061','[email protected]',to_date('20000323','yyyymmdd'),'0921160114','21');
insert into t_stud_j432 values('0921160124','张宇凡','男','13250450031','[email protected]',to_date('20000930','yyyymmdd'),'0921160114','21');
insert into t_stud_j432 values('0921160207','康景威','男','18790450032','[email protected]',to_date('20001130','yyyymmdd'),'0921160207','21');
insert into t_stud_j432 values('0921160225','梁程','女','15256350531','[email protected]',to_date('20000722','yyyymmdd'),'0921160207','21');
insert into t_stud_j432 values('0921160226','朱志阳','男','18796650031','[email protected]',to_date('20001023','yyyymmdd'),'0921160207','21');
insert into t_stud_j432 values('0921160227','逄然斐','女','18390455631','[email protected]',to_date('20000504','yyyymmdd'),'0921160207','21');
insert into t_stud_j432 values('0921160209','张朔山','男','18790460031','[email protected]',to_date('20010130','yyyymmdd'),'0921160207','21');
insert into t_stud_j432 values('0921160228','石雨菲','女','18592450551','[email protected]',to_date('20000101','yyyymmdd'),'0921160207','21');
--计算机科学与技术12名同学
insert into t_stud_j432 values('0902160216','胡文华','男','18790450032','[email protected]',to_date('20001130','yyyymmdd'),'0902160216','02');
insert into t_stud_j432 values('0902160220','赵旭阳','男','18790460031','[email protected]',to_date('20010130','yyyymmdd'),'0902160216','02');
insert into t_stud_j432 values('0902160221','李杰锋','男','15390451131','[email protected]',to_date('20000122','yyyymmdd'),'0902160216','02');
insert into t_stud_j432 values('0902160223','张宏林','男','18726450331','[email protected]',to_date('20001010','yyyymmdd'),'0902160216','02');
insert into t_stud_j432 values('0902160225','熊智豪','男','13260450831','[email protected]',to_date('20001220','yyyymmdd'),'0902160216','02');
insert into t_stud_j432 values('0902160226','赵石','男','18655450232','[email protected]',to_date('20000525','yyyymmdd'),'0902160216','02');
insert into t_stud_j432 values('0902160227','胡超','男','15342450031','[email protected]',to_date('20000214','yyyymmdd'),'0902160216','02');
insert into t_stud_j432 values('0902160301','张飞宇','男','18790332061','[email protected]',to_date('20000323','yyyymmdd'),'0902160301','02');
insert into t_stud_j432 values('0902160302','葛俊潇','男','13250450031','[email protected]',to_date('20000930','yyyymmdd'),'0902160301','02');
insert into t_stud_j432 values('0902160304','朱星辰','男','15256350531','[email protected]',to_date('20000722','yyyymmdd'),'0902160301','02');
insert into t_stud_j432 values('0902160305','李思晓','女','18796650031','[email protected]',to_date('20001023','yyyymmdd'),'0902160301','02');
insert into t_stud_j432 values('0902160325','左仁义','女','18796650031','[email protected]',to_date('20001023','yyyymmdd'),'0902160301','02');
--物联网工程11名同学
insert into t_stud_j432 values('0919160112','谢慧萱','女','18790450032','[email protected]',to_date('20001130','yyyymmdd'),'0919160112','19');
insert into t_stud_j432 values('0919160120','黄耀鹏','男','18790460031','[email protected]',to_date('20010130','yyyymmdd'),'0919160112','19');
insert into t_stud_j432 values('0919160107','杨天诚','男','15390451131','[email protected]',to_date('20000122','yyyymmdd'),'0919160112','19');
insert into t_stud_j432 values('0919160109','陈东剑','男','18726450331','[email protected]',to_date('20001010','yyyymmdd'),'0919160112','19');
insert into t_stud_j432 values('0919160110','郭泽华','男','13260450831','[email protected]',to_date('20001220','yyyymmdd'),'0919160112','19');
insert into t_stud_j432 values('0919160115','申雨欣','女','18655450232','[email protected]',to_date('20000525','yyyymmdd'),'0919160112','19');
insert into t_stud_j432 values('0919160214','何颂贤','男','15342450031','[email protected]',to_date('20000214','yyyymmdd'),'0919160214','19');
insert into t_stud_j432 values('0919160215','黄梨萍','女','18790332061','[email protected]',to_date('20000323','yyyymmdd'),'0919160214','19');
insert into t_stud_j432 values('0919160217','吴月颖','女','13250450031','[email protected]',to_date('20000930','yyyymmdd'),'0919160214','19');
insert into t_stud_j432 values('0919160220','冯玲','女','15256350531','[email protected]',to_date('20000722','yyyymmdd'),'0919160214','19');
insert into t_stud_j432 values('0919160225','戴广轶','男','18796650031','[email protected]',to_date('20001023','yyyymmdd'),'0919160214','19');

--显示专业表
column mno format a3;
column mname format a32;
column loc format a10;
column mdean format a12;
select * from t_major_j432;
--显示学生表
column sno format a11;
column sname format a7;
column sex format a4;
column tel format a12;
column email format a32;
column birthday format a11;
column mno format a11;
column majorno format a3;
set linesize 150;
set pagesize 100;
select * from t_stud_j432;


--权限管理:为学生、班长、年级长分别建立视图并赋予相应查看权限
set heading off
set feedback off
set echo off
set termout off
spool d:\users.txt
--删除用户
select 'drop user c##u'||sno||';' from t_stud_j432;
--新建用户(为每个学生)
select 'create user c##u'||sno||' identified by p'||sno||';' from t_stud_j432;
--授予connect权利
select 'grant connect to c##u'||sno||';' from t_stud_j432;
--删除学生用户视图
select 'drop view vi'||sno||';' from t_stud_j432;
--为每个用户建立各自的视图
select 'create view vi'||sno||' as select * from t_stud_j432 where sno='||sno||';' from t_stud_j432;
--为每个用户授予查询视图的权利
select 'grant select on vi'||sno||' to c##u'||sno||';' from t_stud_j432;
--删除班长用户视图
select 'drop view vi'||sno||';' from t_stud_j432 where sno=mno;
select 'drop view vib'||sno||';' from t_stud_j432 where sno=mno;
--为班长建立班长视图
select 'create view vib'||sno||' as select * from t_stud_j432 where mno='||sno||';' from t_stud_j432 where sno=mno;
--为班长授予查询班长视图的权利
select 'grant select on vib'||sno||' to c##u'||sno||';' from t_stud_j432 where sno=mno;
--删除年级负责人用户视图
select 'drop view vi'||t_stud_j432.sno||';' from t_stud_j432,t_major_j432 where t_stud_j432.majorno=t_major_j432.mno and t_stud_j432.sname=t_major_j432.mdean;
select 'drop view vib'||t_stud_j432.sno||';' from t_stud_j432,t_major_j432 where t_stud_j432.majorno=t_major_j432.mno and t_stud_j432.sname=t_major_j432.mdean;
select 'drop view viz'||t_stud_j432.sno||';' from t_stud_j432,t_major_j432 where t_stud_j432.majorno=t_major_j432.mno and t_stud_j432.sname=t_major_j432.mdean;
--为年级负责人创建年级视图
select 'create view viz'||t_stud_j432.sno||' as select * from t_stud_j432 where majorno='||t_stud_j432.majorno||';' from t_stud_j432,t_major_j432 where t_stud_j432.majorno=t_major_j432.mno and t_stud_j432.sname=t_major_j432.mdean;
--为年级负责人授予查询年级视图的权利
select 'grant select on viz'||t_stud_j432.sno||' to c##u'||t_stud_j432.sno||';' from t_stud_j432,t_major_j432 where t_stud_j432.majorno=t_major_j432.mno and t_stud_j432.sname=t_major_j432.mdean;
spool off
set heading on
set feedback on
set echo on
set termout on

@d:\users.txt

--普通学生仅查询自己
conn c##u0919160225/p0919160225
select * from c##u_j432.vi0919160225;
--班长可以查询自己和班级同学
conn c##u0919160112/p0919160112
select * from c##u_j432.vib0919160112;
--年级长可以查询自己和年同学
conn c##u0919160115/p0919160115
select * from c##u_j432.viz0919160115;

三、实验过程截图

猜你喜欢

转载自blog.csdn.net/y_dd6011/article/details/86156812