当前位置首页 > 计算机 > 数据库/结构与算法
搜柄,搜必应! 快速导航 | 使用教程  [会员中心]

《大型数据库Oracle》实验指导书(0710)

文档格式:DOC| 52 页|大小 894KB|积分 15|2021-10-08 发布|文档ID:29757635
第1页
下载文档到电脑,查找使用更方便 还剩页未读,继续阅读>>
1 / 52
此文档下载收益归作者所有 下载文档
  • 版权提示
  • 文本预览
  • 常见问题
  • 《大型数据库Oracle》编撰闽江学院计算机实验教学中心印制51目 录实验一 Oracle数据库管理与工具使用 2实验二 表连接、高级子查询 6实验三 管理存储结构、用户、权限安全、模式和表 12实验四 约束、索引、视图、序列和同义词 16实验五 PL/SQL编程基础 20实验六 触发器、过程、函数和程序包 27实验七 管理存储结构、备份与恢复 33实验八 SQL*Plus和SQL基本查询 39实验九 管理存储结构、用户、权限安全、模式和表 42实验十 创建和管理表,视图,约束 46实验十一 序列、索引、同义词 48 实验一 Oracle数据库管理与工具使用一、 实验目的1. 掌握Oracle的启动、关闭、连接和管理初始化参数2. 熟悉em和SQL*Plus的使用3. 了解用户和模式的概念,并查询hr模式表的数据二、实验环境一台PC机,安装widows xp操作系统,oracle 10g或11g数据库软件三、实验内容 1. 启动和关闭window操作系统的Oracle服务2. 使用SQL*Plus与Oracle数据库建立连接3. 使用SQL*Plus启动和关闭Oracle数据库4. 使用em和SQL*Plus显示和设置初始化参数文件5. 使用em和SQL*Plus解锁hr模式,并使用SQL*Plus编写查询该模式中表的SQL四、实验步骤1)进入windows xp操作系统 控制面板-》管理工具-》服务启动以下几个服务:OracleService(数据库名)OracleOraDb10g_home1TNSListenerOracleOraDb10g_home1iSQL*PlusOracleDBConsoleorcl(启动em需要的服务)2)使用SQL*Plus连接Oracle数据库 进入windows xp操作系统 Oracle - OraDb10g_home1-》应用程序开发-》SQL Plus 输入:用户名:sys/orcl as sysdba 按确定。

    输入Select * from hr.employees; 按回车可以查询该表数据3)使用SQL*Plus用sys用户关闭 Oracle数据库 输入并执行如下SQL语句:shutdown immediate输入Select * from hr.employees; 按回车无法查询该表数据4)创建并启动与数据库对应的实例 startup nomount 按回车5)为未加载数据库的实例加载数据库alter database mount; 按回车6)将处于未打开状态的数据库设置为打开状态alter database open; 按回车7) 关闭数据库然后直接启动实例,加载数据库,打开数据库 shutdown immediate; startup;8) 使用SQL*Plus显示所有初始化参数 SHOW PARAMETER9) 使用em查询和设置动态初始化参数 进入ie,http://服务器:1158/em 数据库管理-》初始化参数10) 解锁hr用户 使用em用system登录,通过方案-》用户-》编辑hr用户为解锁,同时修改密码 使用sqlplus 用system登录 alter user hr account unlock; alter user hr identified by hr;11) 使用hr用户连接sqlplus, Connect hr/rh; Select table_name from user_tables; Select * from employeesSelect * from 客户信息;查询结果应该包括客户信息的所有列,并且包括该表的所有记录行。

    2)下面的SQL语句将只返回“客户姓名”、“客户地址”和“联系电话”列Select 客户姓名,客户地址,联系电话From 客户信息;这个查询结果将包含指定的列,并且包含该表所有的记录3)在下面的SELECT语句中,将使用WHERE子句以限定检索的客户信息Select 客户信息,客户地址,联系电话From 客户信息Where 所属业务员编号=‘1001’由于添加了WHERE子句,所以查询结果现在只包含业务员编号为“1001”的客户信息4)下面创建的SELECT语句用于对“客户信息”表中的信息分组,输入并执行如下语句: SELECT 所属业务员编号 AS 业务员编号,COUNT(客户编号) AS 客户数FROM 客户信息GROUP BY 所属业务员编号对应于每一个业务员编号都返回一行,并且每行中都包含所属的客户数5)将HAVING子句添加到刚才执行的SELECT语句中,输入并执行如下SQL语句SELECT 所属业务员编号 AS 业务员编号,COUNT(客户编号) AS 客户数FROM 客户信息GROUP BY 所属业务员编号HAVING COUNT(客户编号)>=3;使用SQL*Plus函数:6)下面的SQL语句使用一组数据演示TRUNC函数与ROUND函数之间的区别和相同点。

    SELECT TRUNC(46.326,2),ROUND(46.326,2)FROM DUAL;运行该语句中,TRUNC函数的返回值为46.32,ROUND函数的返回值为46.33SELECT TRUNC(46.326),ROUND(46.326)FROM DUAL;运行该语句中,TRUNC函数和ROUND函数将返回相同的值46五、实验小结通过本次实验学会了使用SQL*Plus与数据库建立连接,使用SELECT语句检索数据实验二 表连接、高级子查询一、 实验目的1.理解什么是连接操作2.如何进行简单的连接操作3.掌握如何进行内连接、外连接、交叉连接4.创建返回多行的子查询5.创建返回单值的子查询6.掌握嵌套子查询的使用二、实验设备一台PC机,安装widows xp操作系统,oracle 10g或11g数据库软件三、实验内容 1. 通过查询SCHOOL模式中的表,以练习各种连接操作的使用,特别是具有外键关联的表在SQL*Plus环境下,打开SQL*Plus,连接到SCHOOL模式1)第一个操作是用逗号分隔连接,将表Student和Class连接起来,查询学生及所在班级信息2) 在上面语句的基础上连接DEPARTMENT表,以显示所在院系名称.3) 修改上一个SELECT语句,将其改为内连接中的等值连接.4) 修改上一个SELECT语句,将其改为连接中的自然连接,并且限制只显示”法律系”的学生信息.5) 修改上一个SELECT语句,将其改为右连接条件.本练习使用逗号分隔连接,交叉连接,内连接和外连接查询多个表,可以看连接查询为操作数据库提供了很大的灵活性.但是连接并不是唯一的访问多个表的方法.子查询的功能与连接一样,也可以实现多表查询.2.本练习将使用子查询数据.子查询很大程度上是通过关键字连接在一起的,这里将使用多个关键字连接子查询,以便查询多个表. SQL*Plus , 连接到SCHOOL模式.1) 创建的第一个SELECT 语句将要返回”06法2班”所有的学生信息. 2) 修改上一个查询语句,使用关键字EXISTS连接子查询,并且要求显示的数据相同.3) 下面的语句将使用嵌套查询显示属于”法律系”的所有学生信息.4) 现在再创建一个SELECT 语,该语句查询”刑法通则”课程的学习成绩最高的学生信息.5) 上面的语句通过使用大于等于(>=)比较运算符和ALL关键字实现,另外一种简单的方法是使用统计函数MAX实现.四、实验步骤1.1)输入并执行如下SQL语句:SELECT S.SID , S.SNAME , S.BIRTH , S.SCLASS , S.SADDRESS , C.DEPARTMENT , C.CNAMEFROM Student S , Class cWHERE S.SCLASS=C.CID;2)输入并执行如下SQL语句: SELECT s.SID , s.SNAME , s.SCLASS, s.SADDRESS , c.DEPARTMENT , c.CNAME, d.dname FROME Student S,Class c , Department d WHERE s.SCLASS=c.CID AND c.DEPARTMENT=d.DID;3)输入并执行如下SQL语句: SELECT s.SID , s.SNAME , s.SBIRTH, s.SCLASS, s.SADDRESS , c.DEOARTMENT , c.CNAME , d.dname FROM Student s JOIN Class c ON s.SCLASS=c.CID JOIN Department d ON c.DEPATMENT=d.DID;4)输入并执行如下SQL语句: SELECT s.SID , s.SNAME , s.SBIRTH , s.SCLASS, s.SADDRESS , c.DEPARTMENT, c.CNAME,d.dname FROM Student s NATURAL JOIN Class c NATURAL JOIN DEPARTMENT dWHERE d.dname=’法律系’ ;5) 输入并执行如下SQL语句: SELECT s.SID , s.SNAME , s.SBIRTH , s.SCLASS, s.SADDRESS , c.DEPARTMENT , c.CNAME , d.dname FROM Student s RIGHT JOIN Class c ON s.sclass=c.cid RIGHT JOIN DEPARTMENT d ON c.department=d.did;2. 1)输入并执行如下语句;SELECT * FROM STUDENTWHERE SCLASS IN(SELECT CID FROM ClassWHERE CNAME =’ 06法2班’此语句使用子查询查询CLASS表,以获取名为” 06法2班”的CID列表.IN关键字再把该返回值与STUDENT表中的CID列表进行比较.2)输入并执行如下SQL语句:SELECT * FROM STUDENT sWHERE EXISTS(SELECT * FROM Class cWHERE c.CNAME=’ 06法2班’ AND s.SCLASS=c.CID);执行该语句获取的学生信息与上一个语句获取的学生信息相同,均为属于” 06法2班”的学生信息.3)输入并执行如下查询语句:SELECT * FROM STUDENTWHERE SCLASS IN (SELECT CID FROM ClassWHERE DEPARTMENT IN(SELECT DID FROM DepartmentWHERE DNAME=’法律系’));4)输入并执行如下SQL语句:SELECT * FROM STUDENTWHERE SID IN(SELECT SID FROM GRADEWHERE SCORE>=ALL(SELECT SCORE FROM GRADEWHERE COID IN(SELECT COID FROM COURSESWHERE CONAME=’刑法通则’)));在上面的语句中,最内层的SELECT语句用于查询课程名为”刑法通则”的课程代号,然后上层SELECT语句根据该课程代号查询该课程的所有成绩;次外层SELECT 语句则使用大于等于(>=)比较算符和ALL关键字,求出大于等于全部成绩的所有学生编号;最后由SELECT 语句列出这些学生信息.5)输入并执行如下SQL语句,比较两者的运算结果.SELECT * FROM StudentWHERE SID IN(SELECT SID FROM GRADEWHERE SCORE=(SELECT MAX(SCORE) FROM GRADEWHERE COID=(SELECT COID FROM COURSES WHERE CONAME=’刑法通则’))); 由于使用统计函数MAX,可以确定返回的最高成绩只有一个,所以可以使用单值子查询;另外由于每门课程只对一个代号,虽然这里没有使用统计函数,但是也可以使用单值子查询.由此可以看出,SQL语句是非常灵活的,可以由多种方法实现相同的功能.五、实验小结通过本次实验理解了什么是连接操作及如何进行简单的连接操作。

    掌握了如何进行内连接、外连接、交叉连接实验三 管理存储结构、用户、权限安全、模式和表一、 实验目的1. 创建表空间2. 创建用户3. 创建角色使得安全模式的设置和管理容易4. 使用GRANT和REVOKE语句授予和撤销对象权限5. 创建表和管理表二、实验设备一台PC机,widows操作系统,oracle 10g三、实验内容 1.创建一个表空间Exer_TabSpace,采用本地化管理,分配初始空间为100MB,使用空间配额不受限制,文件名:Exer_TabSpace.Dbf,放在数据文件相应目录2.创建一个用户TEMPUSER,其口令为oracle,默认表空间为Exer_TabSpace,临时表空间为TEMP,对表空间没有配额限制3. 创建一个用户配置文件TEMPPROFILE,包含的资源及口令限制如下:该用户最多可以建立3个并发的会话连接用户执行语句使用的CPU最长时间为20分钟空闲时间超过15分钟后,断开与用户的连接限制用户每次调用SQL语句时,能够读取的数据库块数200限制用户在登录到Oracle数据库时允许失败的次数24. 为用户TEMPUSER指定配置文件5. 向用户授予连接数据库系统权限。

    6.向用户授予对对象“VENDITION.商量信息”的SELECT权限,并以用户TEMPUSER连接到数据库,以查询“商品信心”表7.撤销向用户TEMPUSER授予的系统权限,向用户授予CONNECT,resource角色四、实验步骤1. 创建一个表空间Exer_TabSpace1)connect system/orcl;2) CREATE SMALLFILE TABLESPACE "EXER_TABSPACE" DATAFILE F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\Exer_TabSpace.dbf SIZE 100M LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO2. 创建一个用户TEMPUSERCREATE USER TEMPUSERIDENTIFIED BY ORACLE DEFAULT TABLESPACE USERSTEMPORARY TABLESPACE TEMPQUOTA UNLIMITED ON USERS;3.创建一个用户配置文件TEMPPROFILECREATE PROFILE TEMPPRFILE LIMITSESSIONS_PER_USER 3CPU_PER_CALL 2000IDLE_TIME 15LOGICAL_READS_PER_CALL 200FAILED_LOGIN_ATTEMPTS 24.为用户TEMPUSER指定配置文件ALTER USER TEMPUSER PROFILE TEMPPROFILE;5向用户授予连接数据库系统权限GRANT CREATE SESSION TO TEMPUSER;6.向用户授予对对象“VENDITION.商量信息”的SELECT权限,并以用户TEMPUSER连接到数据库,以查询“商品信心”表。

    GRANT SELECT ON VENDITION.商品信息 TO TEMPUSER;CONNECT TEMPUSER/ORACLE;SELECT * FROM VENDITION.商品信息;7.撤销向用户TEMPUSER授予的系统权限,向用户授予CONNECT,resource角色connect system/orcl;REVOKE SELECT ON VENDITION.商品信息 FROM TEMPUSER;REVOKE CREATE SESSION FROM TEMPUSER;GRANT CONNECT TO TEMPUSER;Grant resource to exercise;8创建基本表(1)登录到TEMPUSER模式,在其中创建一个学生信息表Student和一个班级信息表ClassConnect TEMPUSER/oracle;Create table Student(ID varchar2(20),NAME varchar2(8),SEX number(1),CLASSID varchar2(20))Tablespace users;Create table Class(ID varchar2(20),PRINCIPAL varchar2(20),TEL varchar2(20))Tablespace users;(2)修改新创建表Student的存储参数。

    Alter table student MOVESTORAGE(NEXT 32KMAXEXTENTS unlimitedPCTINCREASE 0)(3).修改表Class的数据块参数Alter table classPCTFREE 40PCTUSED 40;五、实验小结通过本次实验学会了创建表空间,用户,创建角色使得安全模式的设置和管理容易,使用GRANT和REVOKE语句授予和撤销对象权限创建表和修改表的存储参数实验四 约束、索引、视图、序列和同义词一、 实验目的1.理解如何在表中定义各种约束,以保证数据的完整性2. 理解索引的作用,了解Oracle提供的主要索引类型,以及各自的特点,掌握如何创建各种索引3.在用户模式中创建视图、可更新视图,理解视图的相关性4. 对序列对象进行管理5.管理同义词二、 实验设备一台PC机,widows操作系统,oracle 10g三、 实验内容1.创建表Student的主键,外键,唯一和其他约束2.为SCHOOL模式中的STUDENT表创建索引,并查看索引的使用情况1) 在STUDENT表的SNAME列上创建B树非唯一索引:2) 在STUDENT的班级信息列上创建位图索引:3) 查看Oracle的执行路径。

    4. 在SCHOOL模式中创建视图,查询视图的定义,并对视图进行更新1)创建一个视图Student_Math这个视图基于SCHOOL模式中的STUDENT表,并且该视图只包括那些系别为“数学系”的学生信息在创建视图时使用WITH CHECK OPTION,防止更新视图时,输入非数学系的学生信息2)创建一个连接视图Department_Class,它包含CLASS表中的CLASSNAME列和DEPARTMENT表的DEPNAME列,在WHERER子句中将两个表连接在一起3)查看视图各个列是否允许更新5. 创建序列,序列的开始数字为100,每次递增10,无限增长6. 创建公有同义词emp 为hr.employees 四、实验步骤1.创建表Student的主键,外键,唯一和其他约束1)在TEMPUSER模式中创建表student,classConnect TEMPUSER/oracle;Create table Student(ID varchar2(20),NAME varchar2(8),SEX number(1),CLASSID varchar2(20))Tablespace users;Create table Class(ID varchar2(20),PRINCIPAL varchar2(20),TEL varchar2(20))2)使用sql或可视化工具创建表Student的主键,外键,唯一和其他约束。

    2.为SCHOOL模式中的STUDENT表创建索引,并查看索引的使用情况1) 连接到SCHOOL模式,使用如下语句在STUDENT表的SNAME列上创建B树非唯一索引:connect school/school;create index sname_index on Student(Sname) tablespace users;2) 在STUDENT的班级信息列上创建位图索引:create bitmap index sclass_index on Student(Sclass) tablespace users;3)输入并执行如下语句,查看该语句是否会使用索引 set autotrace traceonly select * from student where sname=’刘丽’;可以看出使用该select语句使用了索引sname_index4. 在SCHOOL模式中创建视图,查询视图的定义,并对视图进行更新1)创建一个视图Student_Math这个视图基于SCHOOL模式中的STUDENT表,并且该视图只包括那些系别为“数学系”的学生信息在创建视图时使用WITH CHECK OPTION,防止更新视图时,输入非数学系的学生信息。

    create or replace view Student_Math as select * from school.student where sclass in ( select ame from class c,department d where c.department=d.did AND D.DNAME=数学系) WITH CHECK OPTION;2)创建一个连接视图Department_Class,它包含CLASS表中的CLASSNAME列和DEPARTMENT表的DEPNAME列,在WHERER子句中将两个表连接在一起输入并执行下列SQL语句:cteate or replace view Department_Class asselect d.dname,amefrom class c,department dwhere c.department=d.did;3)查看视图各个列是否允许更新输入并执行语句:col owner format a20col table_name format a20col column_name format a20select *from user_updatable_columnswhere table_name=UPPER(department_class);5. 创建序列,序列的开始数字为100,每次递增1,无限增长。

    输入并执行如下语句:create sequence Incr_idstart with 100increment by 1nomaxvaluenocycle order;6. 创建公有同义词hr_emp 为hr.employees输入并执行如下语句:Create public synonym hr_emp for hr.employees 五、实验小结通过本次实验初步掌握如何创建表各种约束,以保证数据的完整性理解索引的作用,掌握创建各种索引掌握了创建视图,创建序列和同义词实验五 PL/SQL编程基础一、 实验目的1.学习PL/SQL程序块的结构2.PL/SQL程序中使用的数据类型3.如何在PL/SQL中使用各种变量和常量4.PL/SQL程序的条件判断语句5.PL/SQL程序的循环控制语句6.在PL/SQL程序中使用游标处理表中的信息二、实验设备一台PC机,widows操作系统,oracle 10g三、实验内容 1.在PL/SQL程序中,为了处理数据库中存储的数据,用户可以使用系统预定义的标量变量,也可以使用自定义的复合变量本练习将演示如何使用各种类型的变量:1)使用标量变量标量变量是最简单的变量,它只能存储单个值,它的数据类型也是系统预定义的。

    2)使用%TYPE类型的变量使用%TYPE类型的变量后,如果用户随后修改数据库中该列的结构,则该类型变量的值也随之改变3)使用记录变量使用记录变量首先需要用户定义记录变量的类型,然后才可以声明记录类型的变量4) 使用%ROWTYPE变量ROWTYPE变量的结构与数据库中行的结构完全相同它可以存储数据表中一个完整的行2.使用游标 在程序中访问数据库表最通用的方法是嵌入SQL语句,由于SQL语句一般以集合的形式返回结果,而程序设计语言并不能处理集合形式的数据因此,需要使用游标架起这两者之间连接的“桥梁”本练习访问数据库最简单的方法是使用FOR CURSOR该方法作为一种1 ) 隐式游标,它不需要用户显示定义、打开等操作,就可以浏览数据库中的表现在使用该语句浏览SCHOOL 模式中的STUDENT 表2 ) 使用显示游标这次使用不带参数的显示游标,浏览SCHOOL模式中的STUDENT表3) 使用游标变量游标变量是动态的,可以在打开游标时指定游标所使用的SELECT语句4) 下一个要使用的游标是更新游标更新游标需要使用 FOR UPDATE 子句四、实验步骤1.在PL/SQL程序中,为了处理数据库中存储的数据,用户可以使用系统预定义的标量变量,也可以使用自定义的复合变量。

    1)在SQL*Plus中连接到SCHOOL模式: connect school/school;输入如下语句:SET SERVEROUTPUT ON; DECLAREVAR_score number;BEGINVar_score:=89;UPDATE GRADE SET SCORE=var_scoreWHERE SID=’S06037201’ AND COID=’C0154’;END;在该程序中定义一个NUMBER类型的变量,为其赋值89当运行时,程序块中的UPDATE 语句将使用此值修改GRADE中的分数SCORE 字段2) SQL*PLUS中输入如下语句: DECLAREVar_name STUDENT.SNAME%TYPE;BEGINSELECT SNAMEINTO var_nameFROM STUDENTWHERE SID=’S06037201’;DBMS_OUTPUT.PUT_LINE(var_name);END;运行该程序将显示编号为S06037201的学生姓名3)在SQL*PLUS中输入如下程序,以显示某学生信息:DECLARETYPE student_info IS RECORD(STU_ID STUDENT.SID%TYPE,STU_NAME STUDENT.SNAME%TYPE);Rec_student student_info;BEGINSELECT SID,SNAMEINTO rec_studentFROM STUDENTWHERE SID=’S06037201’;DBMS_OUTPUT.PUT_LINE(rec_student.STU_ID);DBMS_OUTPUT.PUT_LINE(rec_student.STU_NAME);END;4) SQL*PLUS中输入如下程序,以显示STUDENT表中一个完整的行。

    DECLAREVAR_STUDENT student%rowtype;BEGINSELECT*INTO var_studentFROM studentWHERE SID=’s06037242’;Dbms_output.put_line(var_student.sid)Dbms_output.put_line(var_student.sname);Dbms_output.put_line(var_student.sclass);END;2.使用游标 1 ) 隐式游标,它不需要用户显示定义、打开等操作,就可以浏览数据库中的表现在使用该语句浏览SCHOOL 模式中的STUDENT 表SET SERVEROUTPUT ONBEGINFOR studentTable IN(SELECT SID ,SNAME,SBIRTHFROM STUDENT)LOOPdbms_output.put(studenttable.Sid);dbms_output.put(studenttable.Sname);dbms_output.put_line(studenttable.Sbirth);END LOOP;END;2 ) 使用显示游标。

    这次使用不带参数的显示游标,浏览SCHOOL模式中的STUDENT表在SQL*PLUS中输入并执行如下语句:DECLARECURSOR student_cur ISSELECT * FROM STUDENT;Student_ROW student%rowtype;BEGINOPEN student_cur;LOOPFETCH student_cur INTO student_row;EXIT WHEN STUDENT_CUR%NOTFOUND;Dbms_output.put_line(student_row.sid);Dbms_output.put_line(student_row.sname);END LOOP;CLOSE student_cur;END;3) 使用游标变量游标变量是动态的,可以在打开游标时指定游标所使用的SELECT语句 在SQL*PLUS中输入并执行如下SQL 语句,该语句通过游标变量浏览STUDENT 表:DECLARETYPE student_rc IS REF CURSOR;v_rc student_rc;student_row student%rowtype;BEGINOPEN v_rc FOR SELECT* FROM student;LOOPFETCH v_rc INTO student_row;EXIT WHEN v_rc%notfound;dbms_output.put_line(student_row.SID);dbms_output.put_line(student_row.Sname);END LOOP;CLOSE v_rc;END;4) 下一个要使用的游标是更新游标。

    更新游标需要使用 FOR UPDATE 子句在SQL*PLUS中输入并执行如下语句:DECLARECURSOR Grade_cur IS SELECT * FROM GradeFOR UPDATE OF SCORE NOWAIT;var_score number;BEGINFOR r IN Grade_cur LOOPIF r.score<60 THENvar_score:=r.score+10;END IF;UPDATE GradeSet score=var_scoreWHERE CURRENT OF Grade_cur;END LOOP;END;执行该语句后,将修改GRADE表中所有SCORE列值小于60的行五、实验小结通过本次实验学习了PL/SQL程序块的结构,PL/SQL程序中使用的数据类型,如何在PL/SQL中使用各种变量和常量,PL/SQL程序的条件判断语句,PL/SQL程序的循环控制语句,在PL/SQL程序中使用游标处理表中的信息实验六 触发器、过程、函数和程序包二、 实验目的1.了解Oracle匿名程序块2.理解存储过程中各种形式的参数,创建、调用Oracle存储过程3.创建、调用Oracle函数4.创建程序包5.创建程序包的公有成员和私有成员6.理解程序包中重载的过程和函数7.理解程序单元之间的依赖性二、实验设备一台PC机,widows操作系统,oracle 10g三、实验内容 本实验将在SCHOOL模式中运用所学的创建过程的知识。

    这里所有的操作都假设用户连接到的数据库1)创建一个过程PrintStudentInfo,从Student表中查询信息这个过程将显示student 表中所有学生的信息2)调用该过程3)创建一个过程GetStudentInfo,该函数要返回一个公有类型student_info的变量从student、class 和 department 表中查询信息4) 运行GetStudentInfo过程时,需要为它传递一个参数,一指定查询特定的学生信息 本实验将创建一个程序包USER-PKG,其中包含一个过程和一个函数,以及一个私有游标和公有的类型5)创建程序包规范,并在其中声明一个过程和函数头,以及一个公有的记录类型6)创建程序包主体,在程序包主体中声明一个私有游标7)调用程序包中的过程PrintStudentInfo. 8) 调用程序包中的函数GetStudentInfo. 四、实验步骤1) 该过程不包含参数和局部变量输入并执行如下语句:Create or replace procedure printstudentInfo is Begin For student_cur in (select * from student) loop Dbms_output.put(student_cur.sid || ‘\’); Dbms_output.put(student_cur.sname || ‘\’); Dbms_output.put_line(student_cur.saddress);End loop; End PrintstudentInfo; 在SQL*Plus 中执行该语句,就会收到“过程已创建”的信息。

    2)在SQL*PLUS中输入并执行如下语句: Exec printstudentInfo;调用过程时,将显示student 表中所有学生的信息3)在这个过程中,需要连接查询3个表,以显示学生信息,以及所在班级信息和系别信息另外,该过程中,还需要一个输入参数输入并执行如下SQL语句:Create or replace procedure GetstudentInfo(ID in varchar2) is Type studentInfo is record( SID student.sid%type, Sname student.sname%type, ClassName ame%type, DepartmentName department.dname%type); v_studentinfo StudentInfo; Begin Select s.sid,s.sname,ame,d.dname Into v_studentinfo From student s join class c On s.sclass=c.cid Join department d On c.department=d.did WHERE s.sid=ID; Dbms_output.put(v_studentinfo.SID || ‘\’); Dbms_output.put(v_studentinfo.Sname || ‘\’); Dbms_output.put(v_studentinfo.ClassName || ‘\’); Dbms_output.put_line(v_studentinfo.DepartmentName); Exception When no_data_found then Dbms_output.put(‘该学生的信息不存在’); End GetStudentInfo;4)输入并执行如下语句: Declare StudentID varchar2(20):=’s06037201a’; Begin GetstudentInfo(id=> studentID); End; 执行结果将显示指定编号的学生姓名、所在班级和系的名称。

    5) 输入并执行如下语句:Create or replace package USER_PKG is Tupe student_info is record( ID student.sid%type, Name student.sname%type, Birth student.sbirth%type); Procedure PrintstudentInfo; Function GetstudentInfo(id in varchar2) return student_info;End USER_PKG;执行这段代码将返回“程序包已经创建”的信息6)输入并执行如下语句: Create or replace package body USER_PKG is Cursor student_cur is SELECT sid,sname,sbirth,saddresss from student; studentInfo student_info; begin open student_cur; fetch student_cur into studentInfo; while student_cur%found loop Dbms_output.put(v_sthdentinfo.ID || ‘\’); Dbms_output.put(v_sthdentinfo.name || ‘\’); Dbms_output.put(v_sthdentinfo.birth|| ‘\’); Dbms_output.put_line(v_sthdentinfo.addr || ‘\’); End loop; Close student_cur; Exception When invalid_cursor then Dbms_output.put_line(‘定义的游标无效’); When cursor_alreadu_open then Dbms_output.put_line(‘游标已经打开’); End PrintStudentInfo(id in varchar2) return student_info is studentInfo student_info; begin SELECT sid,sname,sbirth,saddress Into studentInfo From student Where sid=id; Return studentInfo; Exception When no_data_found then Dbms_output.put_line(‘该学生信息不存在’); End GetStudentInfo; End USER_PKG; 如果在SQL*PLUS中运行,将返回消息“程序包体已经创建”。

    7)在SQL*PLUS中创建如下的匿名程序块:Begin User_pkg.PrintstudentInfo; End; 运行PrintStudentInfo 过程后,将输入Student 表中所有Student表中所有的学生信息8)该函数将返回一个公有类型student_info的变量,因此调用函数GetstudentInfo 时必须使用包中定义的记录类型 在SQL*PLUS中创建如下的匿名程序模块: Declare Result user_pkg.student_info; Begin Result :=user_pkg.GetStudentInfo(‘s06037201’); Dbms_output.put_line(result.name); Dbms_output.put_line(result.birth); Dbms_output.put_line(result.addr); End; 执行这段程序,将显示指定编号的学生信息。

    五、实验小结通过本次实验了解Oracle匿名程序块,理解存储过程中各种形式的参数,创建、调用Oracle存储过程学会了创建、调用Oracle函数,程序包,创建程序包的公有成员和私有成员理解了程序包中重载的过程和函数,程序单元之间的依赖性实验七 管理存储结构、备份与恢复一、 实验目的1.了解本地化管理表空间和数据字典管理表空间2.能够却换表空间的状态3.能够创建临时、大文件、非标准表空间4.理解Oracle数据库中段、盘区和数据库的概念5.了解备份的重要性6.对数据库进行物理备份与介质恢复7.使用RMAN对数据库进行备份与恢复二、实验设备一台PC机,widows操作系统,oracle 10g三、实验内容 1.在SQL*Plus环境下创建各种表空间,以及操作表空间的状态1) 创建一个表空间 EXER_TABSPACE,该表空间采用本地化管理方式,分配的初始空间为100MB,使用空间配额不受限制,数据文件名为exer_tbaspace.dbf2) 查看创建的表空间信息3) 创建本地化管理的临时表空间 SCHOOL_TEMP,分配的初始大小为20MB,临时文件名为school_temp,表空间的最大配额为100MB。

    4) 查看创建的临时表空间参数信息5) 创建大文件表空间,表空间名为BIGFIE_TABSPACE,数据文件名为test_bf.dbf,初始文件大小为5MB6) 创建撤销表空间UNDO2, 数据文件为UNDO_TBS01.DBF7) 修改表空间EXER_TABSPACE。

    点击阅读更多内容
    卖家[上传人]:仙人指路
    资质:实名认证