orcle实验
哈尔滨工业大学华德应用技术学院
分布式数据库管理与实现 课程名称:
计算机应用技术系 系 别:
数据库开发MATCH_
word
word文档格式规范word作业纸小票打印word模板word简历模板免费word简历
_1714486848811_2 专 业:
1110111433 学 号:
于洋 姓 名:
2013-2014学年第一学期 学 期:
实验成绩:
实验项目列表
序号 实验名称 成绩
实验一 Oracle基本操作 1
实验二 Oracle中的表对象 2
实验三 Oracle中的各类对象及支持的SQL 3
实验四 PL/SQL和数据导入/导出 4 5
6 7 8 9 10 11 12
指导教师签字: 翟霞
实验名称: 实验一 oracle基本操作
实验时间: 2013.10.10 实验地点: 教六505 实验目的: 1.熟练掌握SQL*Plus的使用;
2.熟悉oracle网络连接配置;
3.掌握系统与对象权限管理;
4.掌握DBAC创建数据库和表空间的维护; 实验步骤:
3.熟悉oracle目录结构,查看并写出当前机器中orcl数据库的数据文件、重做日志文件和控制文件的存放位置。
C:\Oracle\product\10.2.0\oracle\oracle
6.使用sys登录SQL*Plus,查看系统中各表空间的状态,使用数据字典DBA_TABLESPACES,写出相关的命令。
Conn/@orcl as sysdba
Select tablespace name,block_size,status,segment_space_management
From dba_tablespaces
7.使用scott登录SQL*Plus,查看该用户下有哪些表,并查看dept表和emp表结构以及表中数据;使用hr连接SQL*Plus,查看该用户下有哪些表,并查看jobs表和employees表结构以及表中的数据,写出完成以上操作的各个命令。
Conn scott/tiger
Select*from tab;
Select*from dept;
Desc dept
Select*from emp’
Desc emp
Conn hr/hrpwd
1
Select*from tab;
Select*from job;
Desc jobs
Select *from employees;
Desc employees
10.使用scott用户登录em,写出操作步骤。
使用SYS登录在角色列表里去修改添加Select_catalog_role
账号scott 密码tiger 权限普通用户。
12.将创建表空间和创建数据库链接的系统特权授予scott用户,以scott用户登录查看获得的系统特权,收回scott用户获得的创建表空间和创建数据库链接系统特权,写出以上操作的命令。
conn sys/manager as sysdba
Grant create tablespace to scott;
Grant create database link to scott;
13.将hr用户下employees表的first_name和last_name两列的更新权限授予给scott用户,并允许该用户具有向外再授权的权利。
conn hr/hr
SQL>Grant update(first_name,last_name) on employees to scott ;
14.在SQL*Plus中,锁定scott用户,并修改该用户的密码为tiger,然后解锁该用户。写出相应的命令。
alter user scott account lock;
Alter user scott account unlock;
2
Alter user scott identified by tiger;
17.创建经理用户manager,指定该用户的数据表空间为datats,临时表空间为tempts。授权该用户可以查看scott用户下emp表中的记录。写出以上操作的命令。
conn sys/manager as sysdba
Drop user manager cascade;
Create user manager identified by manager
Default tablespace datats
Temporary tablespace tempts;
Grant connect to manager ;
Conn manager/manager
Grant select on emp to manager;
必须在有前提条件的情况下才能执行处正确的结果结果,错误信息是因为没有给manager 用户建立相应的数据表空间datats和临时表tempts。
实验总结:掌握SQL*Plus的使用以及DBAC创建数据库和表空间的维护。根据老师的教导明白了SQL*Plus基础。
3
实验名称: 实验二 oracle中的表对象
实验时间: 2013.10.17 实验地点: 教六505 实验目的: 1.熟练掌握oracle中常用的数据类型;
2.熟悉表的存储参数、表结构维护和数据完整性约束维护;
3.熟悉按索引组织的表、簇表和外部表;
4.掌握分区表、对象表和嵌套表;
实验步骤:
1.创建用户stu01,口令为pwd,该用户使用USERS作为数据表空间,使用TEMP作为临时表空间。
conn sys/manager as sysdba
Create user stu01 identified by pwd
Default tablespace users
Temporary tablespace temp;
2.授予用户stu01相关的操作权限,保证该用户可以创建表对象。
conn sys/manager as sysdba
Grant create session,
Create table,
Create database link to stu01;
3.使用stu01用户,在SQL*Plus中,创建stu表,要求包含学号、姓名、年龄和生源地四列;创建course表,要求包含课程号、课程名和任课教师三列,并制定它的存储参数,要求初始区间大小为10KB,下一个区间大小为20KB,最少要分配1个区间的磁盘空间,该表最多分配10个区间,扩充的区间每个和前一个一样大,该表的数据存放在USERS表空间,oracle数据块保留10%的空闲空间,每个oracle数据块至少要利用40%的空间,
4
初始为2个在该数据块上的并发事务预留数据操作空间,最多为10个并发事务预留操作空间。
storage (initial 100k
next 20k
minextents 1
maxextents 10
tablespace users
pctfree 10
pctused 40
4. 使用stu01用户,在SQL*Plus中,创建student表,要包含学号,姓名,性别,年龄和班级,要求学号为主键,姓名唯一,性别取值为男或女,年龄在16到22之间,班级非空。要求以上约束写成表级完整性约束。写出相关的SQL命令。
create table student (
Sno varchar2(10) primary key ,
Name varchar(20) not null unique ,
Sex varchar2(2) check (sex in (‘男’,’女’)),
Age number(2) check (age between 16 and 20),
Class varchar2(2) not null );
7. 使用sys用户连接SQL*Plus,创建4个表空间,分别为ts1、ts2、ts3和ts4,要求数据文件的大小为2MB,并可重用。
conn sys/manager as sysdba
Create tablespace ts1,ts2,ts3,ts4
Datafile'%oracle_home%database\ts1.dbf' size 2M reuse ;
Datafile'%oracle_home%database\ts2.dbf' size 2M reuse;
Datafile'%oracle_home%database\ts3.dbf'size 2M reuse;
Datafile'%oracle_home%database\ts4.dbf'size 2M reuse;
8. 使用scott用户连接SQL*Plus,观察该用户下的emp表,试根据该
5
表创建范围分区表,将各个分区分别放到上
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
所创建的表空间中,然后将emp表中数据插入到新建的范围分区表中,查看各个分区的数据情况,看是否实现的范围分区,写出相关的SQL命令,并仔细体会范围分区的用途。
conn scott/tiger
Drop table part_emp;
Create table part_emp
( Empno number(4) not null,
Ename varchar2(10),
Job varchar(3),
Mgr number(4),
Hiredate date,
Sal number(7,2),
Comm Number(7,2),
Deptno number(7))
Partition by range(sal)
(
Partition sal_1000 values less than(1000) tablespace users,
Partition sal_2000 values less than(2000) tablespace users,
Partition sal_3000 values less than(3000) tablespace users,
Partition sal_4000 values less than(4000) tablespace users,
Partition sal_max values less than(maxvalue) tablespace users);
Insert into part_emp select * from emp;
Commit;
10. 使用hr用户连接SQL*Plus,查看该用户下所有的表,并观察各表的表结构,试创建一个列表分区表,,并插入相关记录进行验证,写出相关的SQL命令。
6
Conn hr/hrpwb@orcl
Select * from tab ;
DPOP TABLE sales_records;
Create table sales_records(
Empno number(4),
Part_no varchar2(12),
Pty number(7,3),
Unit_price number(9,2),
Total_price number(10,2),
Loc varchar2(12))
Partition by list(loc)
(partition sales_records_p1 values(‘东南’,’华东’) tablespace ts1, partition sales_records_p2 values(‘华南’,’中南’) tablespace ts2, partition sales_records_p3 values(‘西南’,’西北’) tablespace ts3, partition sales_records_p4 values(‘华北’,’东北’) tablespace ts4) ; INSERT INTO sales_records
VALUES (1001,’080091’,1,3500,3500,’华南’);
COMMIT;
实验总结:学会了oracle中常用的数据类型,熟悉表的存储参数、表结构维护和数据完整性约束维护。
7
实验名称: 实验三 oracle中的各类对象及支持的SQL 实验时间: 2013.10.24 实验地点:教六505 实验目的: 1.熟练掌握各种表的管理操作;
2.掌握索引与视图;
3.熟悉其它常用
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
对象;
4.熟练掌握Oracle支持的SQL;
实验步骤:
1.创建一个图书对象类型,要求包括书名、作者和摘要属性;基于该图书对象类型创建参考书目表类型;创建课程参考嵌套表,要求包括专业、课程名和参考书目;向该嵌套表中插入三行记录。写出相关的SQL语句命令。
SQL>CONN scott/tiger@orcl
SQL>DROP TYPE book_typ FORCE;
SQL>CREATE TYPE book_typ AS OBJECT(
name VARCHAR2(25),
writer VARCHAR2(25),
sx VARCHAR2(25) );
SQL>DROP TYPE book_tab_typ FORCE;
SQL>CREATE TYPE bool_tab_typ AS TABLE OF book_typ;
SQL>DROP TABLE kc_info CASEADE CONSTRAINTS;
SQL>CREATE TABLE kc_info(
zy VARCHAR2(25),
kc VARCHAR2(25),
cbook VARCHAR2(25),
8
book book_tab_typ)
NESTED TABLE book STORE AS book_tab_typ;
SQL>INSERT INTO kc_info VALUES('软件','数据','高数',book_tab_typ()); SQL>INSERT INTO TABLE(SELECT h.book FORM kc_info h Where b.sx='高数') VALUES('软件','数据','高数');
SQL>INSERT INTO kc_info VALUES('软','数','高',book_tab_typ()); SQL>INSERT INTO TABLE(SELECT h.book FORM kc_info h Where b.sx='高数') VALUES('软','数','高');
SQL>INSERT INTO kc_info VALUES('软件工程','数据仓库','高等数学',book_tab_typ());
SQL>INSERT INTO TABLE(SELECT h.book FORM kc_info h Where b.sx='高数') VALUES('软件工程','数据仓库','高等数学');
3.修改stu表,要求把姓名列宽度在原有基础上加大4个字符,向表中增加一个性别列,默认值为“男”;查看表结构;删除性别列;将stu表重命名为student,将编号列重命名为学号,从数据字典TAB中查看表名的变化,然后再查看表结构。写出相关的语句命令。
Alter table stu modify(ename varchar2(3))
Alter table stu add(sex varchar2(2) default ‘男’)
Select * from emp;
Alter table drop(sex)
Rename stu to student ;
alter table stu rename columnpid to sno ;
Select * from tab ;
Select * from student ;
6. 使用scott用户连接SQL*Plus,观察该用户下的emp表,为该表建立一个视图,要求只显示30好部门的雇员和他们的年收入。写出相关的语
9
句命令。
create or replace view v_emp_30
As select ename,(sal+nvl(comm,0))*12 annual_income from emp
Where deptno=30 ;
查询emp表中,前五行记录的雇员名、工资、佣金和年收入。写出查询语句。
select ename, sal,comm, (sai+nvl(comm,0))*12 from emp where
rownum<6 ;
11.查询emp表中,平均工资超过2000的部门及他们的平均工资。
select deptno sal(avg) from emp group by deptno
Having avg(sal)>2000;
12.熟悉emp表和dept表,查询工资高于2300的雇员及其所在部门。
select d.dname,d.deptno,e.sal,e.ename from emp e,dept d where e.sal>2300 and e.deptno =d.deptno;
13.查询工资高于他所在部门的平均工资的雇员信息。
select * from emp where sal>(select avg(sal) from emp );
14.查询emp表中各部门各职位的工资总额进行从高到低排序,要求显示dept、job、工资总额和次序。
select job (sal+nvl(comm.,0))*12 income from emp order by sal ;
15.查询emp表中工资最高的6个人,要求从高到低显示。
select se1.*,rownum from (select name,salary from scott.emp order by salary
desc ) se1 where rownum<=5 order by desc;
实验总结:掌握索引与视图。熟悉其它常用方案对象以及熟练掌握Oracle支持的SQL。
10
实验名称: 实验四 PL/SQL和数据导入/导出 实验时间: 2013.10.31 实验地点: 教六505 实验目的: 1.熟练掌握PL/SQL基本语法规则;
2.掌握替换变量、绑定变量和复合数据类型;
3.熟悉PL/SQL的
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
控制语句;
4.掌握游标、例外、存储过程、函数、包和数据库触发器;
5.熟悉大对象类型LOB和虚拟专用数据库; 实验步骤:
1.使用PL/SQL的替换变量和绑定变量,输出显示emp表中empno为7788号雇员的sal的值。
SQL>CONN scott/tiger@orcl
SQL>SET serveroutput ON
SQL>DEFINE p_empno=7788
SQL>VARIABLE g_salary NUMBER
SQL>SET VERIFY ON
SQL>BEGIN
Select sal
INTO :g_salary
FROM emp
WHERE empno='&p_empno';
DBMS_OUTPUT.PUT_LINE('工资值已取出至绑定变量g_salary');
END;
2.使用%TYPE定义变量,输出显示empno为7934号雇员的job值。
SQL>CONN scott/tiger@orcl
11
SQL>SET serveroutput ON
SQL>DECLARE
v_eno emp.empno%TYPE;
v_str VARCHAR2(60);
v_str1 v_str%TYPE;
BEGIN
SELECT empno,job INTO v_eno,v_str FROM emp
WHERE empno=7934;
v_str1 :=v_str;
DBMS_OUTPUT.PUT_LINE(v_eno||'is a'||v_str1);
END;
3.使用SELECT INTO语句从dept表中取出deptno为20的数据。
Select dept.loc ,emp.job ,emp.detno From emp,dept
Where emp.detpno=20
4.创建yg表,包含no、name、job和sal四列,使用游标将emp表中
sal大于2000的雇员的empno、ename、job和sal信息插入到yg表中。
SQL>CONN hr/hrpwb@orcl
SQL>DROP TABLE yg;
SQL>create TABLE yg(
no NUMBER PRIMARY KEY, name VARCHAR2(25) not null, job VARCHAR2(25),
sal NUMBER);
SQL>DECLARE
12
CURSOR Emp_Cur(p_empsal NUMBER) IS SELECT no empno, name ename,job JOB,sal SAL FROM emp
Where sal>SAL;
emp_rec Emp_Cur%ROWTYPE;
BEGIN
DELETE FROM yg;
COMMIT;
OPEN Emp_Cur(2000);
LOOP
FETCH Emp_Cur INTO emp_rec;
EXIT WHEN Emp_Cur%NOFOUND; INSERT INTO yg
VALUES(emp_rec.no,emp_rec.name,emp_rec.job,emp_rec.sal);
END LOOP;
CLOSE Emp_Cur,
END;
5.按年度基本工资额修改emp表中记录的sal字段值,如年基本工资低
于36000,sal增加15%,否则sal增加10%。 SQL>CONN scott/tigger@orcl
SQL>DECLARE
v_sal NUMBER(7,2);
CURSOR emp_cur IS SELECT12*sal FROM emp FOR UPDATE
BEGIN
OPEN emp_cur;
LOOP
13
FETCH emp_cur INTO v_sal;
EXIT WHEN emp_cur% NOTFOUND; IF v_sal<36000 THEN
UPDATE emp SET sal=sal*1.15 where CURRENT OF emp_cur;
ELSE
UPDATE emp SET sal=sal*1.1 where CURRENT OF emp_cur;
END IF;
END LOOP;
CLOSE emp_cur;
COMMIT;
END;
7.使用存储过程查询emp表中指定empno的雇员ename、sal和comm。
SQL>CONN scott/tiger@orcl
SQL>CREATE OR REPLACE PROCEDURE query_emp
(p_no IN emp.empno%TYPE,
p_name OUT emp.ename%TYPE,
p_sal OUT emp.sal%TYPE,
p_comm OUT emp.comm%TYPE) IS
BEGIN
SELECT ename,sal,comm
INTO p_name,p_sal,p_comm
FORM emp
WHERE empno=p_no;
END query_emp;
SQL>VARIABLE g_name VARCHAR2(25)
14
SQL>VARIABLE g_sal NUMBER
SQL>VARIABLE g_comm NUMBER
SQL>EXECUTE query_emp(7369,:g_name,:g_sal,:g_comm)
9.建立可重载的更新emp表中雇员薪资的包。根据给定的参数不同,执行不同的更新雇员薪资的操作。
SQL>CONN scott/tigger@orcl
SQL>CREATE OR REPLACE PACKAGE wage_package1
IS
PROCEDURE update_wages
(p_eno IN emp.empno%TYPE,
p_sal IN emp.sal%TYPE,
p_comm IN emp.comm%TYPE);
PROCEDURE update_wages
(p_eno IN emp.empno%TYPE,
P_sal IN emp.empsal%TYPE);
END wage_package1;
SQL>CREATE OR REPLACE PACKAGE BODY wage_package1 IS
PROCEDURE update_wages
(p_eno IN emp.empno%TYPE,
p_sal IN emp.sal%TYPE,
p_comm IN emp.comm%TYPE);
IS
BEGIN
UPDATE emp SET sal=p_sal,comm=p_comm WHERE empno=p_eno; END update_wages;
15
PROCEDURE update_wages
(p_eno IN emp.empno%TYPE,
P_sal IN emp.empsal%TYPE);
IS
BEGIN
UPDATE emp SET sal=p_sal WHERE empno=p_eno; END update_wages;
END wage_package1;
10.为emp表创建一触发器,要求插入记录的工资列sal不小于1000,
同事新纪录的sal值不能高于已有记录最高工资的2倍。 要用到DEPT_WAGE包
SQL>CONN scott/tiger@orcl
SQL>CREATE OR REPLACE TRIGGER check_sal_emp BEFORE INSERT OR UPDATE ON emp
REFERENCING OLD AS old NEW AS new
FOR EACH ROW
BEGIN
IF:new.sal<1000 THEN
RAISE_APPLICATION_ERROR(-20501,'雇员工资不能小于1000'); END IF;
IF: new.sal>2*wage_package3.g_sal THEN
RAISE_APPLICATION_ERROR(-20502,'雇员工资不能超过现有最高工资2
倍');
END IF;
END;
13.用命令行启动EXPORT实用程序导出scott用户方案对象。
16
Log_archive_start=true
#设置文档日志文件。
Log_archive_dest_1=”true” Connect sys/scott as sysdba Shutdown immediate;
Startup mount exclusive
Alter database
Archivelog;
Alter database open;
Shutdown immediate;
Connect sys/scott as sysdba Shutdown immediate;
Starup mount exclusive;
Alter databasenoarchivelog; Alter database open;
Select*from;
实验总结:掌握游标、例外、存储过程、函数、包和数据库触发器。熟悉
大对象类型LOB和虚拟专用数据库。
17