当前位置:文档之家› oracle实验1

oracle实验1

oracle实验1
oracle实验1

实验一Oracle数据库的体系结构——逻辑结构(2学时)

实验目的:在理解在Oracle数据库的体系结构的基础上,在sqlplus环境下查看oracle的逻辑体系结构中括表空间、段、区、块的信息,熟练掌握各种查看语句。

实验内容:1.通过sql语句查看表空间信息

2. 通过sql语句查看段信息

3. 通过sql语句查看区信息

4. 通过sql语句查看块信息

1.理解逻辑体系结构

2.表空间的查看

一个公司可以占多个房

间,房间数可固定,也

可扩展或缩小,但应事

先规划

表空间有多个数据文件,可以增加数据文件 每个公司的设备、员工

都应安排在相应的位

置,

数据对象应存储在相应的段中,如数据段、索引段等 仓库里的东西堆不下,

可以放到别的房间

一个数据文件放不下,可以放到别的数据文件中,只要是一个表空间即可 一个员工可以为本公司

服务,业务需求也可能

与别的公司服务

一个用户默认一个表空间,但其拥有的对象可以放在不同表空间,如create table 指定表空间 一个用户拥有的办公空

间是定额的

一个用户使用的表空间是有限制的,不能超出 盖大楼时,可以根据需

要盖不同功能的房间,

如办公楼,商铺,娱乐

区,进驻大楼的公司可

以是永久的,可以是临

时的

一个数据库有多个表空间,表空间有不同类型 为了更好交流,将相近

办公室放在一起, 将相关的数据文件放在一个表空间中

(1)使用V$TABLESPACE视图查看表空间信息

SELECT * FROM V$TABLESPACE;

(2)查看表空间的属性dba_tablespaces

SELECT TABLESPACE_NAME,CONTENTS, STATUS FROM DBA_TABLESPACES; (3)查看表空间组及其所属的表空间信息dba_tablespace_groups

(4)查看表空间中所包含的段信息dba_segments

Select segment_name,segment_type,extents,tablespace_name from

dba_segments where tablespace_name=…SYSTEM?;

Select * from v$rollname ;查看回滚段的名称列表

Select * from v$rollstat ;查看回滚段的统计信息;

Select segment_name,tablespace_name,bytes,blocks,segment_type from dba_segments where segment_type=…ROLLBACK?

(5)查看表空间中空闲区间的信息

dba_free_space

select * from dba_segments where user=…SCOTT?;

SELECT TABLESPACE_NAME, FILE_ID, BYTES, BLOCKS FROM

DBA_FREE_SPACE;

实验二Oracle数据库的体系结构——物理结构(2学时)

实验目的:在理解在Oracle数据库的体系结构的基础上,在sqlplus环境下对oracle的物理体系结构的操作,其中包括控制文件、数据文件、日志文件,熟练掌握以上操作的各种语句。实验内容:1. 控制文件操作

1.1 查看控制文件

1.2 复制控制文件

1.3 新建控制文件

2. 数据文件

2.1 查看数据文件

2.2 新建控制文件

2.3 修改数据文件

3.日志文件

3.1查看日志文件

3.2 新建日志文件、日志组

3.3 删除日志文件、日志组

1.理解物理体系结构

2.实际体验物理体系结构

?Drop table t

?Create table t as select * from all_objects;

?Create index object_id_idx on t(object_id);

?Set autotrace on

?Set timing on

?Select object_name from t where object_id=29;

Select /*full(t)*/ object_name from t where object_id=29

时间物理读降低

3.查看物理体系结构各部分的内容

?Show parameter sga

?Show parameter pga

?Show parameter shared_pool_size;

?Show parameter db_cache_size;数据缓冲池

?Show parameter log_buffer;日志缓冲区

4.控制文件

4.1从视图V$CONTROLFILE中查询控制文件的名称列表

SELECT NAME FROM V$CONTROLFILE;

4.2从视图V$CONTROLFILE_RECORD_SECTION中查询到控制文件中保存数据的记录类型、记录大小、记录总数量、使用记录数量等信息

SELECT TYPE,RECORD_SIZE,RECORDS_TOTAL,RECORDS_USED

FROM V$CONTROLFILE_RECORD_SECTION;

4.3 创建控制文件

?(1)创建初始控制文件

?

?

?(2)创建新的控制文件

?①了解当前数据库日志文件和数据文件的情况

?查看当前数据库中日志文件的列表

?SELECT MEMBER FROM V$LOGFILE;

?

?查看当前数据库中数据文件的列表

②根据日志文件和数据文件列表设计CREATE CONTROLFILE语句

CREATE CONTROLFILE

DATABASE ORCL

LOGFILE GROUP 1 ('D:\app\Administrator\oradata\orcl\redo01.log'), GROUP 2 ('D:\app\Administrator\oradata\orcl\redo02.log'),

GROUP 3 ('D:\app\Administrator\oradata\orcl\redo03.log') NORESETLOGS

DATAFILE 'D:\app\Administrator\oradata\orcl\system01.dbf',

'D:\app\Administrator\oradata\orcl\sysaux01.dbf',

'D:\app\Administrator\oradata\orcl\undotbs01.dbf',

'D:\app\Administrator\oradata\orcl\users01.dbf',

'D:\app\Administrator\oradata\orcl\orcltbs01.dbf' MAXLOGFILES 50

MAXLOGMEMBERS 3

MAXLOGHISTORY 400

MAXDATAFILES 200

MAXINSTANCES 6

ARCHIVELOG;

③关闭数据库实例

SHUTDOWN NORMAL

④备份原来的文件

⑤启动数据库实例,但不加载数据库

STARTUP NOMOUNT

⑥创建控制文件

?执行前面设计的CREATE CONTROLFILE语句,创建控制文件。

⑦备份控制文件

为了保证新的数据库文件不被破坏,建议将新的控制文件备份到其他不在线的存储介质中,如U盘、移动硬盘或磁带等

⑧修改初始化参数

?如果新建的控制文件与CONTROL_FILE参数中定义的控制文件不同,则根据实际情况修改CONTROL_FILE参数;如果修改了数据库名称,则还需要修改DB_NAME

参数。

5.数据文件

5.1查看数据文件信息

5.1.1从视图V$DATAFILE中查看数据文件的信息

SELECT NAME, STATUS, BYTES FROM V$DATAFILE;

5. 2 创建数据文件

CREATE TABLESPACE 表空间名

DATAFILE 数据文件名SIZE 数据文件大小;

【例】创建表空间MyTbs,同时创建一个50MB的数据文件,代码如下:CREATE TABLESPACE MyTbs

DATAFILE 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\MyDataFile01.DBF' SIZE 50M;

?【例】创建表空间TempTbs,同时创建一个10MB的临时文件,代码如下:CREATE TEMPORARY TABLESPACE TempTbs

TEMPFILE 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\MyTempFile01.DBF' SIZE 50M EXTENT MANAGEMENT LOCAL;

?使用ALTER TABLESPACE语句修改表空间时,可以使用ADD DATAFIEL关键字向表空间中添加数据文件。

?【例】向表空间MyTbs中添加一个数据文件MyDataFile02.DBF,大小为50MB,代码如下:

ALTER TABLESPACE MyTbs

ADD DATAFILE 'F:\APP\ADMINISTRATOR\ORADATA\ORCL\MyDataFile02.DBF' SIZE 50M;

5.3.修改数据文件的大小

?使用ALTER DATABASE语句可以修改数据文件的大小,语法如下:

ALTER DATABASE DATAFILE 数据文件名RESIZE 数据文件大小;

?【例】将数据文件

D:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF的大小修改为

100M,代码如下:

ALTER DATABASE DATAFILE

'D:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF' RESIZE 100M;

?可以执行下面的语句查看当前数据库中数据文件的大小。

SELECT NAME, BYTES FROM V$DATAFILE;

5.4 修改数据文件的在线状态

ALTER DATABASE DATAFILE 数据文件名ONLINE | OFFLINE;

?【例】将数据文件

D:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF的在线状态修改

为脱机,代码如下:

ALTER DATABASE DATAFILE

'D:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF' OFFLINE;

?也可以设置指定表空间中所有数据文件的在线状态,语法如下:

?ALTER TABLESPACE 表空间名DATAFILE ONLINE | OFFLINE;

【例】将表空间MYTBS中所有数据文件设置为联机状态,代码如下:ALTER TABLESPACE MYTBS DATAFILE ONLINE;

5.5删除数据文件

?【例】删除表空间MyTbs,同时删除其中数据文件的代码如下:

DROP TABLESPACE MyTbs INCLUDING CONTENTS CASCADE CONSTRAINTS;

?也可以使用ALTER DATABASE命令删除指定的数据文件。

?D:\APP\ADMINISTRATOR\ORADATA\ORCL\MyDataFile01.DBF的语句如下:ALTER DATABASE DATAFILE

'F:\APP\ADMINISTRATOR\ORADATA\ORCL\MyDataFile01.DBF' OFFLINE

6.日志文件

6.1查看日志文件信息

?查询视图V$LOGFILE,显示重做日志的成员文件,语句如下:

SELECT GROUP#,MEMBER FROM V$LOGFILE;

?查询视图V$LOG,显示控制文件中重做日志组的信息,语句如下:

SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;

6.2 创建日志组

在ALTER DATABASE语句中使用ADD LOGFILE子句创建重做日志组:?添加重做日志文件log1c.rdo和log2c.rdo,初始大小为5M,代码如下:ALTER DATABASE ADD LOGFILE ('log1c.rdo', 'log2c.rdo') SIZE 5000k;

Select * from v$logfile;

?【例】创建重做日志组10,其中包含重做日志文件log1c.rdo和log2c.rdo,语句如下:

ALTER DATABASE

ADD LOGFILE GROUP 10 ('log1a.rdo', 'log2a.rdo') SIZE 5000k;

Select * from v$logfile;

6.3 创建重做日志成员

?【例】将重做日志文件log3a.rdo添加到编号为10的重做日志组中,语句如下:ALTER DATABASE ADD LOGFILE MEMBER 'log3a.rdo' TO GROUP 10;

6.4 删除日志组

?删除编号为10的重做日志组,语句如下:

ALTER DATABASE DROP LOGFILE GROUP 10;

6.5删除重做日志成员

?【例5.47】删除重做日志文件log1a.rdo,语句如下:ALTER DATABASE DROP LOGFILE MEMBER 'log1a.rdo';

实验三常用SQL语言的使用(2学时)

实验目的:熟悉常用的sql语句。

实验内容:1. 查询语句:查询所有、指定段、使用别名、模糊查询、排序查询

2. 单行函数的使用

3. 多表查询

4. 子查询

实验三、四的要求:本实验以题目的方式进行。考虑到大家在《数据库概论》中学过部分sql语句,简单的sql语句在实验手册中没写出sql语句,请大家自己思考,自己书写,复杂的sql语句已经给出,请大家思考后练习

1.常用查询语句

看emp表的所有信息

看有哪些部门,部门有哪些人、每个人的工作是什么

老板要给每个员工多发600元,看每个员工要发多少钱

如果要给老板打印一份员工的工资表,使用上述查询语句老板可能看不懂ename,job,sal,因此需给老板一个看懂的工资表,因此要对列使用别名

如果老板要求文档的列标为Employee' Salary,而且数据为*** annual salary is ***,如SMITH annual salary is 15600

从emp表中查询有几个部门

如果想查询每个部门中的岗位有哪些?

查找smith的薪水,工作,所在部门

查找在82年1月1号入职的员工姓名、雇佣日期

查找薪水在2000—3000的雇员姓名和薪水

显示首字母为S的员工的姓名和工资

显示第三个字符为O的所有员工姓名和工资

如果老板让你查找没有绩效的员工名称

如果老板让你查找员工姓名、工资、绩效和年收入

查找员工岗位是SALESMAN、CLERK、MANAGER的员工信息

查找员工岗位不是SALESMAN、CLERK、MANAGER的员工信息

按sal升序排列,如果有工资相同的,按姓名字符从低到高排序,如成绩排序

选择在部门30 中员工的所有信息

列出职位为(MANAGER)的员工的编号,姓名

找出奖金高于工资的员工

找出每个员工奖金和工资的总和

找出部门10 中的经理(MANAGER)和部门20 中的普通员工(CLERK)

找出部门10 中既不是经理也不是普通员工,而且工资大于等于2000 的员工

找出没有奖金的不同工作

找出没有奖金或者奖金低于500 的员工

2.单行函数

2.1字符型函数

?Upper

?Lower

?Initcap

?Concat

?Substr

?Length

?Replace

?instr

2.2数字型函数

?ROUND(表达式,n):四舍五入

?TRUNC(表达式,n):不四舍五入

?MOD(m,n):取余数

?select round(168.888,1) ,trunc(168.888,1) ,mod(1900,400) from dual;

?结果为:168.9,168.8,300

?mod(300,400)余数为300,应记住oracle的这个规定

2.3日期型函数

?Months_between()

?Select ename,job,hiredate,months_between(sysdate,hiredate) from emp;

?Add_months()

?select add_months(sysdate,1) from dual;

?Next_day()

?select next_day(sysdate,'星期一') from dual;系统日期的下一个星期一

?Last_day

?select last_day(sysdate) from dual;

2.4转换函数

?1、to_char (日期,…fmt?):日期转换为字符

?fmt为格式,如:'dd-mm-yyyy',yyyy/mm/dd

?select to_char(sysdate,'dd-mm-yyyy') from dual;结果为14-08-2014 ?select to_char(sysdate, 'yyyy/mm/dd ') from dual; 结果为2014/08/14 ?2、to_char (数字,'fmt'):数字转换为字符串

?select to_char(sal*12,'L99999.00') from emp; ¥81468.00

?3、to_date(字符串,['fmt']):

?select to_date('16-6月-03') -sysdate from dual;

?

课后练习:

?所有员工名字前加上Dear ,并且名字首字母大写

?找出姓名为6 个字母的员工

?找出姓名中不带R 这个字母的员工

?显示所有员工的姓名的第一个字

?假设一个月为30 天,找出所有员工的日薪,不计小数

?找到2 月份受雇的员工

?列出员工加入公司的天数(四舍五入)

?分别用case 和decode 函数列出员工所在的部门,deptno=10 显示'部门10', ?deptno=20 显示'部门20' deptno=30 显示'部门30' deptno=40 显示'部门40' 否则为'其他部门…

3. 分组函数

3.1 count:

select count(*) from emp;

?公司中有多少员工由经理管理(即不属于高级管理成层);

?select count(mgr) from emp;

?查看部门号为10的员工数

?select count(*) from emp where deptno=10;

?查看有多少个岗位

select count(distict job) from emp;

3.2 avg

?select avg(sal) from emp; 平均工资

3.3 sum

?查看这个月工人的工资支出

?select sum(sal+nvl(comm,0)) from emp;

3.4 min

?select min(sal) from emp;最少工资

3.5 max

?select max(sal) from emp;最多工资

?查找雇佣第一员工和最迟雇佣员工

?Select min(hiredate),max(hiredate) from emp;

3.6 group by:一般与分组函数一起使用

?Select deptno,avg(sal) from emp group by deptno;

?select job,avg(sal) from emp having avg(sal) >2000 group by job;

3.8分组函数嵌套

?查找工作不是president的员工中按工作分类不同工作的最低平均工资和最高平均工资

?select min(avg(sal)),max(avg(sal)) from emp where job not like 'PRE%' group by job;

课后练习:

?分组统计各部门下工资>600 的员工的平均工资

?统计各部门下平均工资大于1600 的部门

?算出部门30 中得到最多奖金的员工奖金

?算出每个职位的员工数和最低工资

?显示每个部门的平均工资和最高工资

?查询最高工资的员工姓名、岗位、工资

?查询出高于平均工资的员工的信息

?查出高于本部门员工平均工资的员工信息

4.多表查询

4.1 相等连接

?查询每个员工所属部门和所在的具体地点

?select emp.ename,dept.dname,dept.loc from emp.dept where emp.deptno=dept.deptno;

?select a.ename,b.dname,b.loc from emp a,dept b where

a.deptno=

b.deptno;

?公司高级管理层想知道工资为1600元或以上的员工所属的部门和地点

?select emp.ename,dept.dname,dept.loc from emp.dept where emp.deptno=dept.deptno and emp.sal>=1600

4.2 自连接

老板要找每个分析员的上司谈话,要查询每个分析员及上司的姓名?select w.ename "雇员名",w.job "雇员工作",m.ename "经理姓名", m.job "经理工作"from emp w,emp m where w.mgr=m.empno and

w.job='ANALYST';

4.3 不等连接

查询显示工资级别在3-5级之间的所有员工

?select e.empno, e.ename, e.job, e.sal, s.grade from emp e, salgrade s where( e.sal between s.losal and s.hisal) and( s.grade>2 and

s.grade<6);

?查询员工姓名、工资、工资级别

?select a1.ename,a1.sal,a2.grade from emp a1,salgrade a2 where a1.sal between a2.losal and a2.hisal;

4.4 外连接

?select * from dept 发现有4个部门,编号为40的部门在emp表中并没有见过,想查出所有部门的名称、地点和员工信息,怎么办

?select a.*,b.* from emp a, dept b where a.deptno(+)=b.deptno;

?Select emp.empno,emp.ename,emp.sal,dept.deptno,loc from dept left outer join emp on (emp.deptno=dept.deptno);

?Select emp.empno,emp.ename,dept.deptno,dept.loc from emp right outer join dept on (emp.deptno=dept.deptno);

4.5 表连接特殊语法

using子句

?Select e.empno,e.ename,e.sal,d.loc from emp e join dept d using (deptno);

On 子句

?Select e.empno,e.ename,e.sal,e.deptno,d.loc from emp e join dept d on

(e.deptno=d.deptno) order by d.loc;

左外连接

?Select emp.empno,emp.ename,emp.sal,dept.deptno,loc from dept left outer join emp on (emp.deptno=dept.deptno);

右外连接

?Select emp.empno,emp.ename,dept.deptno,dept.loc from emp right outer join dept on (emp.deptno=dept.deptno);

5.子查询

5.1 单行子查询

?查询与SMITH相同职位的人有谁

?select ename from emp where job=(select job from emp where ename='SMITH');

查询职位与'SMITH'相同,而工资不超过ADAMS的员工

?select ename, job, sal from emp where job=(select job from emp where ename='SMITH') and sal<= (select sal from emp where

ename='ADAMS');

?查询最高工资的员工姓名、岗位、工资

查出高于本部门员工平均工资的员工姓名、部门号、工资、部门平均工资

select e.ename,e.deptno,e.sal,avg.mysal from emp e,(select deptno,avg(sal) mysal from emp group by deptno) avg where (e.deptno=avg.deptno) and (sal>avg.mysal);

5.2 多行子查询

1、使用in 操作符的多行子查询:select ename, job, sal from emp where sal in (select max(sal) from emp group by job);

查询与部门号10相同的工作

思路:查部门号为10的有哪些工作

再查属于这些工作的人

select * from emp where job in (select distinct job from emp where deptno=10);

2、使用all操作符的多行子查询

查询比10号部门工资低的员工的姓名、工作、工资

select ename, job, sal from emp where sal

还可用min,效率高

select ename, job, sal from emp where sal<(select min(sal) from emp where deptno=10);

3、使用any操作符的多行子查询:

查询比每个部门平均工资都高的员工姓名、工作、薪水

select ename, job, sal from emp where sal >any (select avg(sal) from emp group by job);

select ename, job, sal from emp where sal >(select min(avg(sal)) from emp group by job);

4、多列子查询

查询与smith工作、部门相同的员工

select ename,job,deptno from emp where (deptno,job)=(select deptno,job from emp where ename='SMITH');

练习:如何显示高于自己部门平均工资的员工的信息

select a1.ename,a1.sal,a1.deptno,a2.agsal from emp a1,(select deptno,avg(sal) agsal from emp group by deptno) a2 where a1.deptno=a2.deptno and a1.sal>a2.agsal;

当在from子句中使用子查询时,该子查询被当做一个视图来对待,因此也叫内嵌视图,当在from子句中使用子查询时,必须给子查询指定别名,否则没办法查处上述例子中的agsal 5、分页

select * from emp;--查出所有,将其作为内嵌视图

select a1.*,rownum rn from (select * from emp) a1;--产生行编号

select a1.*,rownum rn from (select * from emp) a1 where rownum<=10;--取前10

select a1.*,rownum rn from (select * from emp) a1 where rownum<=10 and rownum>=6 --错误的,oracle中rownum只能用一次--取6-10

select a1.*,rownum rn from (select * from emp) a1 where rownum<=10 and rn>=6;--错误

select a1.*,rownum rn from (select * from emp) a1 where rn>=6 and rn<=10;--错误

只能将select a1.*,rownum rn from (select * from emp) a1 where rownum<=10作为一个视图,

然后执行select * from(select a1.*,rownum rn from (select * from emp) a1 where rownum<=10) where rn>=6;则得到6——10的行数

5.3、其他语句中使用子查询

1、建表语句中使用子查询

create table mytable(id,name,sal) as (select empno,ename,sal from emp);

drop table mytable;

用处:如要进行练习,不破坏原表的结构

2、insert语句中使用子查询

建新表

create table employee (name varchar2(10), sal number(7,2),job varchar2(10));

插入数据

insert into employee select ename,sal,job from emp where deptno=10;

3、删除语句中使用子查询

delete from employee where sal>(select sal from employee where job='CLERK');

4、update语句中使用子查询

update employee set sal=( select sal from employee where job='CLERK');

5.4、合并查询:

用集合图来演示

1、union :取得结果集的并集,自动去掉结果中的重复行

select ename,sal,job from emp where sal>1600 union select ename,sal,job from emp where

job='MANAGER';

讲解过程中,分别使用select语句,让大家看是不是去掉重复行

2、union all:与union相似,但不去掉重复行,也不会排序

select ename,sal,job from emp where sal>1600 union all select ename,sal,job from emp where job='MANAGER';

3、intersect:取交集

select ename,sal,job from emp where sal>1600 interact select ename,sal,job from emp where

job='MANAGER';

取共同行

4、minus:取差集,前面的减去后面的,如果前面的小于后面的,则是空集,

select ename,sal,job from emp where sal>1600 interact select ename,sal,job from emp where

job='MANAGER';

用这些是比and、or快

实验四 扩展SQL 语言的使用(2学时)

实验目的:熟悉oracle 自己特殊的sql 语句。

实验内容:1. Decode 函数 case 函数 替代变量

2. 索引的建立、查看、使用

3.用户管理

4.簇的使用

5.序列的使用

1. Decode 函数

? select ename,job,decode(job,'CLERK','增加工资','SALESMAN','减工资','暂

时不涨工资') "备注" from emp;

? select ename,job,decode(job,…CLERK?,…增加工资?,…SALESMAN?,…减工资?,…暂时

不涨工资?) “备注” order by “备注” from emp;

?

select ename,job,sal,decode(job,

'CLERK',sal*10,'SALESMAN',sal*0.1,sal) "新工资"from emp;

2. case 函数

?

select empno,ename,sal, case deptno ?

when 10 then '财务部' ?

when 20 then '研发部' ?

when 30 then '销售' ?

else '未知部门' ? end 部门

from emp;

3.替代变量

老板一开始让你打印一份工资在1600元以上的员工的清单,你写了SQL

语句,但老板改

变主意了,要打印1900以上的,怎么办,来回改吗?

?select empno,ename,sal from emp where sal>=&v_salary;

如果是查询不同岗位的工资

?如果你想避免多次使用的替换变量被多次提示输入,使用&&开头的替代变量。

?select ename,job,&&v_col from emp order by &v_col;

?执行输入sal,则查出sal,下次再查就不输入了,但你想换成comm,怎么办,?undefine v_col,然后再执行,输入comm,则查到了comm

?select &v_col1, & v_col2, &v_col3 from &v_tname where &condition order by &sorting;

4.使用ACCEPT定义变量

?ACCEPT 变量名PROMPT '变量说明文字…

?Accept.sql文件中存储

?ACCEPT v_col1 PROMPT '请输入你想查找的列:'

?ACCEPT v_col2 PROMPT '请输入你想查找的列:'

?ACCEPT v_col3 PROMPT '请输入你想查找的列:'

?ACCEPT v_tname PROMPT '请输入你想查找的表:'

?ACCEPT condition PROMPT '请输入你想查找的表条件:'

?ACCEPT sorting PROMPT '请输入你想按什么排序:'

?select &v_col1, & v_col2, &v_col3 from &v_tname where &condition order by &sorting;

5.索引

5.1 如何建立索引

自动建立:用户建立表的时候如果有primary key、unique约束时,会自动建立唯一索引unique index

手动建立:用户建立

create index 索引名on 表名(列名)

create index book_bid_idx on book(bid);//索引名包括了表名、列名、对象名,也可自己命名create index abc on student(sid,sname);

create index abc1 on student(sname,sid);他们是不同的

索引abc 对Select * from student where sid=1; 这样的查询语句更有效

索引abc1 对Select * from student where sname=?louis?; 这样的查询语句更有效因此建立索引的时候,字段的组合顺序是非常重要的。一般情况下,需要经常访问的字段放在组合字段的前面

5.2 查看索引

select index_type,index_name,table_name,uniqueness from user_indexes;

select index_name,table_name,column_name,column_position from user_ind_columns;

5.3 查看索引是否被使用

步骤一:@ D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\utlxplan.sql—创建了索引查询表

?步骤二:explain plan for select ename,job,sal,comm from empcon where (sal-700)<0;--已解释

?步骤三:desc plan_table;

?步骤四:查看索引是否使用

?Select id,operation,options,object_name,position from plan_table;

?步骤五:truncate table plan_table;

?步骤六:. explain plan for select ename,job,sal from empcon where ename like ‘PRE%’;

?步骤七:Select id,operation,options,object_name,position from plan_table;

5.4删除索引

drop index 索引名

6. 用户管理

6.1 忘记管理员密码:

?Sqlplus “/ as sysdba ”

?Alter user sys identified by newpwd

?Conn sys / as sysdba

6.2 创建用户:

CREATE USERS 用户名IDENTIFIED BY 密码 password expire。

?password expire密码过期,第一次登录强制更改密码

?create user dog identified by dog 用户名dog ,密码dog

6.3更改密码

?更改当前用户更改密码:passw;更改密码为a

?管理员更改密码:Alter user dog identified by a123;

6.4权限赋予

?新创建的用户是没有任何权限的,连登录权限都没有

?conn dog/dog 是登不上的。

系统权限:访问和使用数据库或系统资源的能力

系统权限授予:如登录权限:grant create session to dog另一种:登录权限:grant connect to dog; 严格说是角色,

对象权限:维护数据库中的对象的能力,如增、删、改、查

对象权限授予

对象权限grant select,update,delete,insert on scott.emp to dog;将对scott用户下的表emp的增、删、改、查授予与用户dog;

6.5 查看权限

?查看系统权限select grantee, privilege from dba_sys_privs where grantee='SCOTT'; ?select * from session_privs

?查看所有用户:

?select * from dba_users; dba用户使用

? select * from all_users;

? select * from user_users;

?查看用户系统权限:不能实现

?select * from dba_sys_privs;

?select * from all_sys_privs;

?select * from user_sys_privs;

?查看oracle用户对象权限:

?select * from dba_tab_privs;

? select * from all_tab_privs;

? select * from user_tab_privs;

?查看所有角色:

?select * from dba_roles;

?查看用户所拥有的角色:

?select * from dba_role_privs;

?select * from user_role_privs;

?查看RESOURCE具有那些权限,用

?SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='RESOURCE';

6.6 角色

conn sys/sys as sysdba;

?create role animal;

?grant create session,create table,select any table to animal;

?grant insert,create view,delete ,update on scott.emp to animal

?系统权限和对象权限要分开给

6.7 权限传递

?对象权限传递:grant select on scott.emp to dog with grant option;

?系统权限传递:GRANT CREATE PROCEDURE TO DOG WITH ADMIN OPTION;

6.8 回收权限

?revoke create procedure from dog

6.9 锁定和解锁用户

?换到sys用户

?锁定用户:alter user dog account lock

?用户登录conn dog/dog,提示,the account is locked

?解锁用户:ALTER USER DOG ACCOUNT UNLOCK;

?用户登录:提示连接成功

实验五PL/SQL-----过程(2学时)

实验目的:掌握块的结构、程序结构、过程的使用

实验内容:通过实例在掌握块的结构、过程的使用

1.块的使用

输入雇员号,输出雇员名和薪水,没有则提示“你输入的编号有误”

?declare--定义部分

?v_ename varchar2(5);

?v_sal number(7,2);

?begin --执行部分

?select ename,sal into v_ename,v_sal from emp where empno=&no;

?dbms_output.put_line('雇员名:'||v_ename||'薪水:'|| v_sal);--控制台输出

?exception

?when no_data_found then

?dbms_output.put_line('你输入的编号有误');

?end;

2.数据类型的使用

%type: 为了使一个变量的数据类型与另一个已经定义了的变量的数据类型一致,比如表的某个字段

?declare

?c_tax_rate number(3,2):=0.03;

?v_ename emp.ename%type;

?v_sal emp.sal%type;

?begin

?select ename,sal into v_ename,v_sal from emp where empno=&no;

?--输出

?dbms_output.put_line('雇员名'||v_ename||'工资:'||v_sal||);

end;

record 记录类型,存储由多个列值组成的一行数据

?declare

?--定义一个与emp表中的这几个列相同的记录数据类型

?type emp_record_type is record(

?v_ename emp.ename%type,

?v_job emp.job%type,

?v_date emp.hiredate%type);

?--声明一个该记录类型的记录变量

?v_emp_record emp_record_type;

?begin

?select ename, job , hiredate into v_emp_record from emp where deptno=&no;

?dbms_output.put_line('雇员名称:'|| v_emp_record .v_ename||'的岗位是:'|| v_emp_record .v_job||'雇佣日期:'|| v_emp_record .v_date);

?end;

%rowtype:定义一个表示表中一行记录的变量,当表的某些列的数据类型发生变化,变量

Oracle实验报告

Oracle数据库实验报告 实验一:Oracle 10g安装卸载及相关工具配置 一、实验目标: 安装Oracle 10g,了解OEM,通过DBCA安装数据库,通过DBCA删除数据库,sqldeveloper连接数据库,卸载oracle 10g。 二、实验学时数 2学时 三、实验步骤和内容: 1、安装Oracle10g(默认安装数据库) 双击setup.exe, 选择基本安装,安装目录D:盘,标准版,默认数据库orcl,口令bhbh。 进入先决条件检查界面时:网络配置需求选项不用打勾,直接下一步,是。 直到安装成功。 2、登陆和了解OEM 主要是已网页的形式来对数据库进行管理。

http://主机IP:1158/em 用户名:sys 口令:bhbh 身份:sysdba 或者 用户名:system 口令:bhbh 身份:normal 3、通过DBCA删除已安装的默认数据库orcl 程序->Oracle - OraDb10g_home1->配置和移植工具->Database Configuration Assistant->删除数据库->…… 4、通过DBCA安装数据库xscj 程序->Oracle - OraDb10g_home1->配置和移植工具->Database Configuration Assistant->创建数据库->…… 5、sqldeveloper连接数据库 打开sqldeveloper,新建连接 连接名:system_ora 用户名:system 口令:bhbh 主机名:本机计算机名 SID:xscj 测试,显示成功,连接,保存。

6、卸载oracle 10g Windows下 1>停止所有Oracle服务,点Universal Installer卸载 2>删除注册表中的所有关于Oracle项 在HKEY_LOCAL_MACHINE\SOFTWARE下,删除Oracle目录 3>删除硬盘上所有Oracle文件。 (1)Oracle安装文件 (2)系统目录下,在Program files文件夹中的Oracle文件 四、上机作业 根据实验步骤完成逐个实验目标中的任务。 五、心得体会 通过这次的实验,我了解了oracle数据库的情况。懂得了数据库就是把数据存储在一个类似与仓库的地方,需要用时才从数据库里调出来。通过上机实践,知道了装数据库和卸载数据库,并且学会了怎样连数据库。 实验二:Oracle 10g手工建数据库 一、实验目标: 安装Oracle 10g数据库环境,手工建立数据库;通过Net Configuration Assistant建立监听,使用sqldeveloper连接数据库测试。 二、实验学时数 2学时 三、实验步骤和内容: 先安装好Oracle 10g数据库环境(不安装默认数据库)。 1.创建好相关的目录

Oracle实验指导书

实验一 Oracle查询工具的使用 一、目的和要求: 1.掌握SQL*Plus工具的使用 2.掌握iSQL*Plus工具的使用 二、实验内容: 1.点击“开始”->“运行”,输入cmd命令进入DOS环境,然后执行SQL PLUS命令登录 数据库,并使用CONNECT命令切换当前的连接用户,具体操作如下: (1) SQL PLUS system/密码 (2) Connect sys/密码 as sysdba (3) Alter user scott account unlock identified by tiger; (4) Connect scott/tiger@orcl (5) Exit 2.在浏览器中输入以下网址: http://localhost:5560/isqlplus 三、分析与思考

实验二 SQL语句基本查询语句 一、实验目的: 1.掌握select语句的基本语法 2.掌握常用函数的使用 3.了解格式化查询结果的常用命令 二、实验内容: 使用scott下的emp表和dept表,完成以下操作: 1.查询部门编号是20的员工信息。 2.查询工作为CLERK的员工的员工号、员工名和部门号。 3.查询奖金COMM高于工资sal的员工信息。 4.查询奖金高于工资20%的员工信息。 5.查询部门编号是10并且工作为MANAGER的员工和部门编号是20并且工作为CLERK 的员工的信息。 6.查询工作不是MANAGER和CLERK,并且工资大于或等于2000的员工信息。 7.查询有奖金的员工信息。 8.查询所有员工的人数和他们的平均工资。 9.查询没有奖金或奖金低于100的员工信息。 10.查询最近两年入职的员工信息。 11.查询工龄大于或等于10年的员工信息。 12.查询员工信息,要求以首字母大写的方式显示所有员工的姓名。 13.查询员工名正好为6个字母的员工信息。 14.查询员工名字中不包含字母S的员工。 15.查询员工姓名的第二个字母为M的员工信息。 16.查询所有员工姓名的前三个字符。 17.查询所有员工的姓名,如果包含字母s,则用S替换。 18.查询员工的的姓名和入职日期,并按入职日期从先到后进行排序。 19.显示所有员工的项目、工作、工资,按工作降序排序,若工作相同则按工资升序排序。 20.显示所有员工的姓名、入职的年份和月份,按入职日期所在的月份排序,若月份相同则 按入职的年份排序。 21.查询每个部门中的员工数量、平均工资和平均工作年限。 22.查询各个部门的人数及平均工资。 23.查询各种工作的最低工资,并输出最低工资低于3000的工作名称。 24.查询各个部门中不同工种的最高工资。 25.统计各个工种的员工人数与平均工资。 三、分析与思考

Oracle实验

实验一oracle基本操作 实验目的: 1.熟练掌握SQL*Plus的使用; 2.熟悉oracle网络连接配置; 3.掌握系统与对象权限管理; 4.掌握DBAC创建数据库和表空间的维护; 实验内容: 1.查看并写出和oracle相关的各个服务;查看注册表中oracle产品和服务的注册信息。 OracleDBConsoleorcl OracleJobSchedulerORCL OracleOraDb10g_home1iSQL*Plus OracleOraDb10g_home1TNSListener OracleServiceORCL 2.查看并写出oracle环境变量path的值。 D:\oracle\product\10.2.0\db_1\bin; 3.熟悉oracle目录结构,查看并写出当前机器中orcl数据库的数据文件、重做日志文件和控制文件的存放位置。 D:\oracle\product\10.2.0\oradata\orcl 4.查看并写出启动例程所需要的初始化参数文件initorcl.ora、口令文件PWDORCL.ORA和数据字典定义文件CATALOG.SQL所在的位置。 D:\oracle\product\10.2.0\db_1\database 5.使用sys登录em,查看scott和hr用户是否是锁定状态,如果锁定进行解锁,并修改hr用户的密码为abc。写出操作步骤。 用户名:sys 密码:abc 连接身份:sysdba 1

点击管理,用户,选择scott点击编辑,点击未锁定,点击应用 用户,选择hr点击编辑,点击未锁定,输入口令:abc,确认口令:abc,点击应用 6.使用sys登录SQL*Plus,查看系统中各表空间的状态,使用数据字典DBA_TABLESPACES,写出相关的命令。 Connect sys/abc@orcl as sysdba Select * from dba_tablespace; 7.使用scott登录SQL*Plus,查看该用户下有哪些表,并查看dept表和emp 表结构以及表中数据;使用hr连接SQL*Plus,查看该用户下有哪些表,并查看jobs 表和employees表结构以及表中的数据,写出完成以上操作的各个命令。 Connect scott/tiger@orcl select * from tab; desc emp Select * from dept; Select * from emp; Connect hr/tiger@orcl 8.在SQL*Plus中,将scott用户下的emp表数据转出至e:\oracle\data\emp.txt,写出相应的命令。 9.在SQL*Plus命令提示符下输入select * from table;调用文本编辑器编辑SQL 缓冲区中的内容,将命令改为select * from tab;并执行SQL缓冲区中修改以后的命令。写出完成以上操作的各命令。 Select * from table ; Edit 2

Oracle实验六

湖南科技学院计算机与通信工程系 实验报告

loop dbms_output.put_line('员工姓名:'||varname||',员工职务:'||vartitle||''); fetch mycur into varname,vartitle; end loop; close mycur; end; 执行结果如下: (2)创建存储过程GetGrade,查询指定员工的工资,使用CASE语句输出其工资等级。工资小于等于3000,等级为“低”;工资大于3000,小于5000,等级为”中”;工资大于等于5000,等级为高。并执行该存储过程。 创建存储过程代码如下: SQL>create or replace procedure zyn_33.GetGrade (v_depid in number) as v_wage zyn_33.employees.wage%type; v_str varchar2(5); Begin select wage into v_wage from zyn_33.employees where emp_id=v_depid; v_str:=case when v_wage<=3000 then '低' when v_wage>3000 and v_wage<5000 then '中' when v_wage>=5000 then '高' end; dbms_output.put_line('该员工工资等级为'||v_str); end; 执行存储过程代码如下: SQL>Execute zyn_33.GetGrade(3,’夏小冉’); SQL>commit; 执行结果如下: (3)创建触发器MyTrigger,它的作用是当dhb.Departments中Dep_id列的值发生变化时,自动更新表Employees中的Dep_id列的值,从而保证数据完整性。程序代码如下: SQL>create or replace trigger zyn_33.mytrigger after update on zyn_33.departments

Oracle 实验4(实验报告)-PL_SQL程序设计

学期 Oracle数据库应用技术 实验报告 选课序号: 班级: 学号: 姓名: 指导教师:史金余 成绩: 2017年月日

目录 1.实验目的 (1) 2.实验内容 (1) 2.1 触发器设计 (2) 2.2 存储过程、自定义函数设计 (2) 2.3 程序包设计 (3) 3.实验步骤 (3) 3.1 创建表空间RESTAURANT,创建用户DINER (3) 3.2 创建餐饮系统数据库的所有表,并向各表插入演示数据 (4) 3.3 完成【实验内容】中的触发器、存储过程、函数和程序包等 功能设计,将程序脚本保存到文本文件Source.sql中 (7) 4.实验总结 (13)

PL/SQL程序设计 1.实验目的 ◆掌握PL/SQL程序设计基本技巧,包括基本数据类型、表类型、数组类 型、匿名程序块、控制语句、PL/SQL中使用SQL语句、游标、错误处 理等。 ◆熟悉和掌握PL/SQL中关于存储过程、函数、包和触发器程序设计技术。 2.实验内容 实验平台:PL/SQL Developer或Oracle的其它客户端管理工具。 某餐饮系统数据库(加粗字段为主键,斜体字段为外键),请创建如下各数据表,并实现如下存储过程、函数、包和触发器等功能设计,将程序脚本保存到文本文件Source.sql中: (1)菜肴类别表MK(菜肴类别编号MKid,菜肴类别名称MkName),菜肴类别名称:鱼类、蔬菜类、凉菜类、肉类、主食类和酒水类等。 (2)菜单信息表MList(菜肴编号Mid,菜肴名称Mname,菜肴类别MKid,菜肴单价Mprice,菜肴成本单价Mcost,更新日期Mdate)。 (3)餐台类别表DK(餐台类别编号DKid,餐台类别名称DkName),餐台类别:包间和散台等。 (4)餐台信息表Dinfo (餐台编号Did,餐台名称Dname,餐台类别DKid,座位数Dseats,更新日期Ddate)。 (5)消费单主表C (消费单号Cid,餐台编号Did,消费开始时间StartTime,结账时间EndTime,消费金额合计Smoney,盈利金额合计SPsum),其中,消费金额合计=消费单明细表CList中该消费单号的所有消费记录的消费金额的合计,即SUM(消费金额)或SUM(菜肴单价×消费数量),盈利金额合计=消费单明细表CList中该消费单号的所有消费记录的盈利合计,即SUM((菜肴单价- 菜肴成本单价)×消费数量)。 (6)消费单明细表CList (消费单号Cid,序号Sid,菜肴编号Mid,菜肴名称Mname,消费数量Cqty,菜肴单价Mprice,菜肴成本单价Mcost,消费金额Cmoney) ,消费金额=消费数量×菜肴单价;消费数量为正数是正常点菜,消费数量为负数是退菜,消费数量为0是赠菜。

oracle实验报告

上机1:Oracle的安装与配置 (时间:2011.2.28) 一、实验目的 掌握Oracle10g的安装与网络连接配置 二、实验内容 1、安装Oracle10g 2、查看安装后的数据库文件目录结构 3、查看当前数据库的数据文件、控制文件、重做日志文件、参数文件 4、为连接到Oracle服务器进行网络连接配置 上机2:Oracle10g常用工具的使用 (时间:2011.3.1) 一、实验目的 掌握Oracle10g常用工具(SQL*PLUS、iSQL*PLUS、EM)的使用 二、实验内容 1、利用企业管理器(EM)查看当前数据库: 1) 查看当前数据库系统的内存结构 2) 查看当前数据库的工作模式 3) 查看当前数据库“SYS”方案下的逻辑对象 4) 查看当前数据库的表空间

5) 查看“SYS”用户的权限 2、利用SQL*PLUS查看当前数据库 分别查看当前数据库的数据文件、控制文件、重做日志文件。 3、利用iSQL*PLUS查看当前数据库,分别查看当前数据库的数据 文件、控制文件、重做日志文件。 上机3:PowerDesigner开发与应用-1 (时间:2011.3.7) 一、实验目的 掌握使用PowerDesigner工具设计CDM(概念数据模型)二、实验内容 设计“员工医疗保险系统”数据库的CDM(概念数据模型) 上机4:PowerDesigner开发与应用-2 (时间:2011.3.8) 一、实验目的 掌握使用PowerDesigner工具设计PDM(物理数据模型)二、实验内容 设计“员工医疗保险系统”数据库的PDM(物理数据模型)

上机5:创建数据库 (时间:2011.3.15) 一、实验目的 1、复习巩固网络连接配置操作 2、了解使用Oracle数据库配置助手创建、删除数据库的操作 二、实验内容 (详见教材102:实践内容) 上机6:创建数据库、表空间和数据文件 (时间:2011.3.17) 一、实验目的 掌握表空间和数据文件的创建、查看、修改、删除操作及命令 二、实验内容 (详见教材102-103:实践内容) 上机7:数据库的安全管理-1 (时间:2011.3.22) 一、实验目的 1、掌握概要文件的建立、修改、查看、删除操作 2、掌握用户的建立、修改、查看、删除操作 二、实验内容 详见教材130-131:(1)—(6)、(13)

oracle实验--存储过程

实验八存储过程的使用 一、实验目的 1、熟练掌握存储过程的定义及使用 二、实验要求 1、实验前做好上机实验的准备,针对实验内容,认真复习与本次实验有关的知识,完成 实验内容的预习准备工作; 2、能认真独立完成实验内容; 3、实验后做好实验总结,根据实验情况完成实验报告。 三、实验内容 创建图书管理库的图书、读者和借阅三个基本表的表结构: 图书表: BOOK ( BOOK_ID NUMBER(10), SORT V ARCHAR2(10), BOOK_NAME V ARCHAR2(50), WRITER V ARCHAR2(10), OUTPUT V ARCHAR2(50), PRICE NUMBER(3)); 读者表 READER ( READER_ID NUMBER(3), COMPANY V ARCHAR2(10), NAME V ARCHAR2(10), SEX V ARCHAR2(2), GRADE V ARCHAR2(10), ADDR V ARCHAR2(50)); 借阅表 BORROW ( READER_ID NUMBER(3),

BOOK_ID NUMBER(10), BORROW_DA TE DA TE); 插入数据: BOOK表: insert into book values(445501,'TP3/12','数据库导论','王强','科学出版社',17.90); insert into book values(445502,'TP3/12','数据库导论','王强','科学出版社',17.90); insert into book values(445503,'TP3/12','数据库导论','王强','科学出版社',17.90); insert into book values(332211,'TP5/10','计算机基础','李伟','高等教育出版社',18.00); insert into book values(112266,'TP3/12','FoxBASE','张三','电子工业出版社',23.60); insert into book values(665544,'TS7/21','高等数学','刘明','高等教育出版社',20.00); insert into book values(114455,'TR9/12','线性代数','孙业','北京大学出版社',20.80); insert into book values(113388,'TR7/90','大学英语','胡玲','清华大学出版社',12.50); insert into book values(446601,'TP4/13','数据库基础','马凌云','人民邮电出版社',22.50); insert into book values(446602,'TP4/13','数据库基础','马凌云','人民邮电出版社',22.50); insert into book values(446603,'TP4/13','数据库基础','马凌云','人民邮电出版社',22.50); insert into book values(449901,'TP4/14','FoxPro大全','周虹','科学出版社',32.70); insert into book values(449902,'TP4/14','FoxPro大全','周虹','科学出版社',32.70); insert into book values(118801,'TP4/15','计算机网络','黄力钧','高等教育出版社',21.80); insert into book values(118802,'TP4/15','计算机网络','黄力钧','高等教育出版社',21.80); READER表: insert into reader values(111,'信息系','王维利','女','教授','1号楼424'); insert into reader values(112,'财会系','李立','男','副教授','2号楼316'); insert into reader values(113,'经济系','张三','男','讲师','3号楼105'); insert into reader values(114,'信息系','周华发','男','讲师','1号楼316'); insert into reader values(115,'信息系','赵正义','男','工程师','1号楼224'); insert into reader values(116,'信息系','李明','男','副教授','1号楼318'); insert into reader values(117,'计算机系','李小峰','男','助教','1号楼214'); insert into reader values(118,'计算机系','许鹏飞','男','助工','1号楼216'); insert into reader values(119,'计算机系','刘大龙','男','教授','1号楼318'); insert into reader values(120,'国际贸易','李雪','男','副教授','4号楼506'); insert into reader values(121,'国际贸易','李爽','女','讲师','4号楼510'); insert into reader values(122,'国际贸易','王纯','女','讲师','4号楼512'); insert into reader values(123,'财会系','沈小霞','女','助教','2号楼202'); insert into reader values(124,'财会系','朱海','男','讲师','2号楼210'); insert into reader values(125,'财会系','马英明','男','副教授','2号楼212'); BORROW表:

数据库oracle实验3

实验三数据更新与视图 一、实验目的 1、掌握数据更新语句的使用; 2、掌握视图操作的基本方法和应用,理解基于视图的查询和数据更新操作的过程。 二、实验内容 1.在实验一创建的表中使用SQL语句完成以下操作: (1)学生“宾兆琦”要退学,请删除该学生的所有记录。 (2)将姓名为“朱安琪”同学的专业改为“软件工程”。同时创建转专业记录表change_major,表中包括编号属性列(ID),学号属性列(sno),姓名属性列(sname),转出专业属性列(cbefor),转入专业属性列(cafter)和转专业时间属性列(ctime),在change_major表中插入“朱安琪”同学的转专业信息。 (3)删除选修了“计算机网络”但没有及格的选课记录。

(4)将(106559,路前元,男,汉族,共青团员,1995/11/8,null,null)插入学生关系。 (5)在C表中插入以下元组: “382,数据库原理与应用,3.5,选修,4”, “383,JAVA语言程序设计,4.5,选修,6” (6)创建视图JSJ_VIEW,包括计算机科学与技术专业学生的学号,姓名,其选修的课程名及成绩属性列。

(7)创建查询每个学生的修课学分的视图XF_VIEW,要求列出学生学号及总学 分。 (8)在创建的视图中查询李洋洋和李向冲所修的学分数。 2.在实验二创建的表中使用SQL语句完成以下操作: (1)现有一供应商,代码为S9、姓名为英特尔、所在城市西安,供应情况如下:供应零件P5给工程J7数量为600,供应零件P4给工程J4数量为500,请将此供应商的信息和供应信息插入数据库。

Oracle实验报告

软件与信息工程学院 10级软件工程/软工三班 数据库实践 Oracle 数据库实验报告 学 院: 专业班级: 程号: 名:

实验一:Oracle 10g 安装卸载及相关工具配置、实验目标: 安装Oracle 10g, 了解OEM,通过DBCA安装数据库,通过DBCA删除数据库, sqldeveloper 连接数据库,卸载oracle 1Og。 二、实验学时数 2 学时 三、实验步骤和内容: 1、安装OraclelOg (默认安装数据库) 双击, 选择基本安装,安装目录D:盘,标准版,默认数据库Orel, 口令bhbh。 进入先决条件检查界面时:网络配置需求选项不用打勾,直接下一步,是。 直到安装成功。 2、登陆和了解OEM 主要是已网页的形式来对数据库进行管理。 -OraDb10g_home1-配置和移植工具->Database Configuration Assistant-删除数据库 -> …… 4、通过DBCA安装数据库xscj 程序->Oracle - OraDb10g_home1-配置和移植工具->Database Con figuration Assistant->&」建数据库->...... 5、sqldevelOper 连接数据库 打开sqldeveloper,新建连接 连接名:system_Ora

用户名:system 口令:bhbh 主机名:本机计算机名 SID:xscj 测试,显示成功,连接,保存。 6、卸载oracle 10g Windows 下 1>停止所有Oracle服务,点Universal Installer卸载 2〉删除注册表中的所有关于Oracle项 在HKEY_LOCAL_MACHINE\SOFTWARE 删除Oracle 目录 3>删除硬盘上所有Oracle文件。 (1)Oracle安装文件(2)系统目录下,在Program files文件夹中的Oracle文件 四、上机作业 根据实验步骤完成逐个实验目标中的任务。 五、心得体会 通过这次的实验,我了解了oracle数据库的情况。懂得了数据库就是把数据存储在一个类似与仓库的地方,需要用时才从数据库里调出来。通过上机实践,知道了装数据库和卸载数据库,并且学会了怎样连数据库。 实验二:Oracle 10g 手工建数据库 、实验目标:

Oracle数据库实验三

作业三表 一、实验目的 掌握表的操作和管理。 二、实验内容 1、创建基本表 2、利用子查询创建表 3、完整性约束设置 4、表数据的插入和修改、删除 三、实验步骤 前提:以system登录,编写下述题目的sql脚本。 1、创建表t1 字段如下: empno number(4) not null primary key, ename varchar2(20) not null, sex varchar2(1) not null, birthday date, salary number(7,2) default(0) 2 3、利用子查询创建表t2

子查询的条件是:性别为男 4、利用子查询创建表t3 要求是:只获取t1的表结构 (此方法为错误方法!!!!) 查看表t2的约束,请解释与t1相比,缺少了什么?为什么? select table_name, constraint_type, constraint_name, search_condition from user_constraints where table_name=’T2’ order by table_name, constraint_type;

为表t2增加缺少的约束 创建表author,其字段如下: id number(3), name varchar2(20), sal number(6,2) 为该表增加字段address,类型为varchar2(100)修改该表的sal字段名为salary

为字段salary增加值在0到10000内的约束删除字段address 删除该表

oracle实验以及答案

实验1SQL*Plus的使用和基本SELECT语句 实验目的 通过该实验使学员掌握简单查询语句的基本使用方法以及别名的指定方法,能够创建和执行SQL脚本。 实验要求 (1)掌握SQL*Plus的基本使用 (2)掌握SELECT语句的简单用法。 实验步骤 (1)登录到SQL*Plus,初始用户名为:SCOTT,口令为TIGER。 答:打开sql plus,输入用户名和密码登陆;也可以从dos窗口输入命令sqlplus Scott/tiger 连接数据库 (2)分别显示EMP、DETP、SALGRADE表结构,并察看表中的数据。 答:DESC emp; DESC dept; DESC salgrade; (3)创建一个查询显示每个雇员的姓名、工作、受雇日期及雇员编号,并且要将雇员编号作为第一列显示。最后将该SQL语句保存成文件p1q1.sql,并执行该脚本文件。 答:SELECT empno,ename,job,hiredate FROM emp; (4)将脚本文件p1q1.sql调取到SQL缓冲区,并将列标题设置为Emp #,Employee,Job及Hire Date,将该SQL语句保存成文件p1q2.sql,最后返回查询结果。 答:SELECT empno "Emp #",ename "Employee",job "Job",hiredate "Hire Date" FROM emp; 思考练习题 1.SQL*Plus命令是用于访问数据库的吗? 答:可以访问数据库。

2.下面的SELECT语句能成功执行吗? SQL>SELECT ename,job,sal Salary 2FROM emp; 答:可以成功执行。 3.下面的语句有3处错误,请纠正它们。 SQL>SELECT empno,ename 2Salary x 12 ANNUAL SALARY 3FROM emp; 答:A.表中没有Salary项,改为sal; B.ename后缺少逗号。 C.别名中含有大写字母和空格,需加双引号,改为“ANNUAL SALARY” 4.创建一个查询从EMP表中检索出不重复的工作名称。 答:SELECT DISTINCT job FROM emp; 5.用一个逗号和一个空格将姓名和工作连接后作为一个整体输出,显示的列标题为Employee and Title。 答:SELECT ename||', '||job "Employee and Title" From emp; 6.创建一个查询,用逗号将表中所有字段的信息连接作为一个整体输出,输出的列标题为THE_OUTPUT。 答:SELECT empno||ename||job||mgr||hiredate||sal||comm||deptno "THE_OUTPUT" FROM emp; 实验2使用WHERE和ORDER BY子句 实验要求 (1)掌握WHERE子句的用法。 (2)掌握ORDER BY子句的用法。

四川师范大学《oracle》实验报告

声明:此文档只作为学习参考,不得用作它途! 实验一了解ORACLE环境,使用ORACLE数据库实用工具 1.目的要求: 了解ORACLE数据库的各个常用工具软件 2.实验内容: 在ORACEL数据库下使用SQL*PLUS ,SQL*PLUS Worksheet,PL/SQL Developer 工具,企业管理器等实用工具与Oracle交互。并在企业管理器中观察ORACLE的底层存储原理。在PL/SQL Developer中书写简单的SQL语言。 3.主要仪器设备及软件 1)PC 2)ORACLE数据库 实验二熟悉SQL语言 1.目的要求 在SQL*PLUS或PL/SQL Developer工具中编写SQL语句 2.实验内容

在ORACLE 数据库中定义用户,给用户赋权限,创建,修改和删除表格,视图等数据库对象,并向表格中插入,修改和删除数据。体会SQL语言中ORACLE的“方言”。 对自己建立的表做查询:包括单表查询,多表查询,嵌套查询,分组查询,相关查询 3.主要仪器设备及软件 1)PC 2)ORACLE数据库 自定义用户:create user taozi identified by taozi; 给用户赋DBA权限:grant dba to taozi; 创建表格 student,sc,course: Create table student (sno char(10) primary key, sname varchar(20) not null, sage smallint, ssex char(2), sdept varchar(20)); Create table course (cno char(10) primary key, cname varchar(50) not null, credit smallint); Create table sc (sno char(10), cno char(10), grade smallint, primary key(sno,cno)); 创建视图:create view oracle as (select sno,sname,sage from student); 删除视图:delete oracle; 为student 表增加一列 jiguan: alter table student add jiguan varchar(10); 删除jiguan 列:alter table student drop column jiguan; 删除student 表结构:drop table student; 插入数据:insert into student values('004','AA','21','f','MA'); insert into student values('005','BB','20','m','CS');

oracle实验报告

四川师范大学计算机学院oracle实验报告册 院系名称:计算机科学学院 课程名称:oracle数据库运用与开发 实验学期2012 年至2013 年第 1 学期 专业班级:电子商务2010级5班 姓名:苏瑶学号:2010110338 指导教师:俞晓老师 实验最终成绩:

实验一了解ORACLE环境,使用ORACLE数据库实用工具 (验证性实验 4学时) 1.目的要求: 了解ORACLE数据库的各个常用工具软件 2.实验内容: 在ORACEL数据库下使用SQL*PLUS ,SQL*PLUS Worksheet,PL/SQL Developer工具,企业管理器等实用工具与Oracle交互。并在企业管理器中观察ORACLE的底层存储原理。在PL/SQL Developer中书写简单的SQL语言。 3.主要仪器设备及软件 1)PC 2)ORACLE数据库

--创建用户 create user user1 identified by user1; --赋给用户建表、连接等权限 grant connect to user1; grant create any table to user1; grant resource ,dba to u1; --连接用户 Conn user1/user1; --收回权限(dba ) revoke dba from u1;

------------------------------------------------------------------------- 实验二熟悉SQL语言 (验证性实验 4学时) 1.目的要求 在SQL*PLUS或PL/SQL Developer工具中编写SQL语句 2.实验内容 在ORACLE 数据库中定义用户,给用户赋权限,创建,修改和删除表格,视图等数据库对象,并向表格中插入,修改和删除数据。体会SQL语言中ORACLE的“方言”。 对自己建立的表做查询:包括单表查询,多表查询,嵌套查询,分组查询,相关查询 3.主要仪器设备及软件 1)PC 2)ORACLE数据库 --修改数据: update student set sAge=19where sage=18; --删除数据: delete from student where sname='吴芳'; --输出成绩大于60小于80的学生的名字 select sname from student,sc where grade >60and grade <80and student.sno=sc.sno; --输出学生表中的总人数 select count(*)from student;

实验1 ORACLE基本操作-使用SQL DEVELOPER

实验1 ORACLE 基本操作 实验目的:掌握ORACLE的连接,了解ORACLE的数据库结构;熟悉PLSQL/Developer图形化管理工具的使用。 实验内容: 一、机房环境的准备工作(每次重新启动机器后必做的工作) 为了能启动ORACLE并利用图形化的管理工具PLSQL/Developer对ORACLE数据库进行操作,在机房的机器中要先做如下的准备工作: 1、查看自己的机器名 方法:右击“我的电脑”→“属性”,找到并记住自己的计算机名 2、修改监听程序 方法:“开始”→“所有程序”→“Oracle-OraDb11g_home1”→“配置和移植工具”→“Net Manager”,在弹出的窗口中展开目录至最后的“LISTENER”,在右侧的窗口中将主机名改成自己的主机名→单击窗口右上角的红色叉号按钮关闭→在弹出的对话框中选择“保存”。

3、启动服务 右击“我的电脑”→“管理”→“服务和应用程序”→“服务” 找到并按顺序启动如下两个服务: 。 启动顺序:先启动,再启动 启动方法:右击服务名选择“启动” 注:当在自己的机器上使用时,这两个服务若显示已启动则不用重新再启动。 二、运行SQL Developer,建立与ORACLE数据库的连接 1、运行Oracle自带的SQL Developer软件 方法:“开始”→“所有程序”→“Oracle-OraDb11g_home1”→“应用程序开发”→“SQL Developer” 2、以system用户建立与数据库的连接 在SQL Developer窗口中选中“连接”→点击“新建”按钮,

在窗口中输入以下信息,使其以system用户与数据库进行连接 注: 连接名:可以随便起 用户名:system,若以其他用户身份登录,可以在这里更改用户名 密码:123456 SID:orcl 点击“测试”按钮,若成功则在左下角显示“状态:成功”,若有错误,则会出现红色的提示信息,按信息进行问题查找。 最后点击“连接”按钮进行连接

Oracle实验三、四答案

上机练习三 ?选择部门30中的所有员工 Select * from emp where deptno=30 ?列出所有办事员的姓名、编号和部门编号 Select empno,ename,deptno from emp where job='CLERK'; ?找出佣金高于薪金的员工 Select * from emp where comm>sal; ?找出佣金高于薪金60%的员工 Select * from emp where comm>sal*1.6; ?找出部门10中所有经理和部门20中所有办事员的详细资料 Select * from emp Where (deptno=10 and job='MANAGER') or (deptno=20 and job='CLERK'); ?找出部门10中所有经理、部门20中所有办事员、既不是经理又不是办事员但薪金大于或等于2000的所有员工的详细资料 Select * from emp Where (deptno=10 and job=?MANAGER?) or (deptno=20 and job=?CLERK?) Or (job not in(?MANAGER? ,?CLERK?) and sal>=2000) ?找出收取佣金的员工的不同工作 Select distinct job from emp Where comm is not null; ?找出不收取佣金或收取的佣金低于100的员工 Select * from emp Where comm is null or comm<100; ?找出各月倒数第三天受雇的所有员工。 Select * from emp Where last_day(hiredate)-2=hiredate; ?找出早于12年前受雇的员工 Select * from emp Where months_between(sysdate,hiredate)/12>12; ?以首字母大写的方式显示所有员工的姓名

oracle实验5

实验五存储过程与触发器 一、实验目的 (1)掌握Oracle数据库编程语言PL/SQL的基础知识。 (2)掌握游标、存储过程和触发器的创建,使用方法。 (3)了解使用高级语言连接数据库的技术、基本方法,了解ODBC、ADO和JDBC 的技术。 二、实验内容 在实验一、实验二创建的表中用PL/SQL语言完成以下内容: 1.创建存储过程,根据调用时提供的学生姓名查询该学生所修课程的课程信息,将课程号和课程名输出到输出窗口,并给出函数调用语句块。 create or replace procedure p1 (v_sname in student.sname%type, v_cno out https://www.doczj.com/doc/0f5186295.html,o%type, v_cname out https://www.doczj.com/doc/0f5186295.html,ame%type) is cursor c1 is select https://www.doczj.com/doc/0f5186295.html,o,cname from student,c,sc where student.sno = sc.sno and https://www.doczj.com/doc/0f5186295.html,o = https://www.doczj.com/doc/0f5186295.html,o and student.sname = v_sname; begin open c1; loop fetch c1 into v_cno,v_cname; exit when c1%notfound; dbms_output.put_line(v_cno||','||v_cname); end loop; close c1; end p1;

declare a student.sname%type := '王迪'; b varchar2(20); c varchar2(50); begin p1(a,b,c); end; 2.创建存储过程,统计指定学生修课的平均成绩和选课门数,将统计结果用输出参数传递给主程序,在PL/SQL主程序中调用存储过程,输出过程的返回结果。 create or replace procedure p2 (v_sname in student.sname%type, v_avg out number, v_count out number) is

oracle设计实验报告材料

课程设计 课程题目:ORACLE应用系统设计设计题目:音像店信息管理系统 专业:计算机科学与技术 班级:计131 组员:李霆桑珠扎西虞洲 学号: 130761 130767 130762 日期: 2016-03-04 信息工程学院计算机科学与技术

目录 一.课程目的………………………………………………………. 二.题目要求……………………………………………………… 三.日期安排………………………………………………………. 四.组内分工……………………………………………………… 五.实验条件......................................................... ........................... 六.实验内容......................................................... ........................... (1)第一部分:Oracle管理技术……………………………………… 1.数据库管理…………………………………………………….. 2.角色和用户管理………………………………………………... 3.表和视图管理………………………………………………….. 4.索引和序列管理………………………………………………... 5.PL/SQL编程…………………………………………………… 6.使用游标、存储过程和触发器………………………………… 7.表空间管理……………………………………………………… 8.文件管理………………………………………………………… (2)第二部分:Oracle开发技术……………………………………….. ①数据库设计………………………………………………………………… ②界面设计.................................................... ③结果测试…………………………………………………………………… 七.问题及解决…………………………………………………….. 八.总结...............................................

相关主题
文本预览
相关文档 最新文档