收藏 分享(赏)

《数据库原理》实验教学指导书.doc

上传人:scg750829 文档编号:7459150 上传时间:2019-05-18 格式:DOC 页数:39 大小:340.50KB
下载 相关 举报
《数据库原理》实验教学指导书.doc_第1页
第1页 / 共39页
《数据库原理》实验教学指导书.doc_第2页
第2页 / 共39页
《数据库原理》实验教学指导书.doc_第3页
第3页 / 共39页
《数据库原理》实验教学指导书.doc_第4页
第4页 / 共39页
《数据库原理》实验教学指导书.doc_第5页
第5页 / 共39页
点击查看更多>>
资源描述

1、目 录第一部分 大纲和计划1.1 实验教学大纲 11.2 实验实施计划表 2第二部分 实验说明2.1 实验一:了解 Oracle 中的基本知识 32.2 实验二:Oracle 中的查询 42.3 实验三:Oracle 中的表 52.4 实验四:PL/SQL 编程(一) 62.5 实验五:PL/SQL 编程(二) 72.6 实验六:PL/SQL 编程(三) 82.7 实验七:PL/SQL 编程(四) 92.8 实验八:触发器设计 10第三部分 实验补充教材3.1 实验一:了解 Oracle 中的基本知识 113.2 实验二:Oracle 中的表 123.3 实验三:Oracle 中的查询 153

2、.4 实验四:PL/SQL 编程(一) 153.5 实验五:PL/SQL 编程(二) 183.6 实验六:PL/SQL 编程(三) 223.7 实验七:PL/SQL 编程(四) 263.8 实验八:触发器设计 311第一部分 大纲和计划1.1数据库原理实验教学大纲一、课程名称:数据库原理(Principle of Database System)二、课程编码:三、课程总学时: 16 学时 理论: 0 学时;实验: 16 学时四、课程总学分: 学分五、适用专业和开课学期:计算机科学与技术专业,第 4学期。六、实验的目的与任务:通过 ORACLE中用户及表的创建、SQL 查询、ORACLE 中的表

3、、PL/SQL 编程、触发器设计等实验,使学生掌握数据库技术的基本原理在大型数据库中的应用。七、主要仪器设备及台(套)数:计算机八、主要实验教材(指导书)及参考用书:数据库原理及应用(Oracle)实用教程 刘甫迎、王道学、党晋蓉主编 清华大学出版社2004年 10月第 1版 九、成绩考核方式及评分标准:教 师 根 据 学 生 通 过 FTP上 交 的 实 验 报 告 确 定 其 完 成 数 量 和 质 量 ,进 一 步 综 合 学 生 的 上 机 态 度 进 行 评 分 。 实 验 成 绩 占 课 程 总 成 绩 的 30%。十、实验开出率:100%十一、实验项目与要求:序号 实验项目名称时

4、数项目要求项目类型项目性质每台(套)仪器人数 目的要求实验耗材定额(按自然班)1了解 ORACLE的基本知识 2 必修 操作 验证 1掌握用户及表的创建方法,熟悉ORACLE的运行环境2 ORACLE中的查询 2 必修 操作 验证 1重点掌握复杂查询的实现方法3 ORACLE中的表 2 必修 操作 验证 1大致了解 ORACLE中的各种表4 PL/SQL编程 8 必修 操作 设计 1掌握简单的 PL/SQL编程的方法5 触发器设计 2 必修 操作 设计 1了解各种触发器的设计方法注:1项目要求:必修、选修、其他;2项目类型:演示、操作、模拟;3项目性质:验证、综合、设计、研究。212 数据库原

5、理实验大纲及其实施计划表课程综述本课程重点讲解数据模型、数据库系统结构、关系数据库、SQL 语言、数据库安全性和完整性、关系数据库设计理论、数据库设计、数据库编程、查询优化、并发控制和恢复、数据库管理系统以及数据库技术新进展等内容。通过本课程的学习,学生不但可以掌握数据库技术的基本原理,而且还能够大型数据库的基本应用方法。实验设置总体说明本课程设计了八个实验,通过 ORACLE 中用户及表的创建、SQL 查询、ORACLE 中的表、PL/SQL 编程、触发器设计等实验,学生可以掌握数据库技术的基本原理在大型数据库中的应用。1 了解 Oracle的基本知识2 Oracle中的表3 Oracle中

6、的查询4 PL/SQL编程(一)5 PL/SQL编程(二)6 PL/SQL编程(三)7 PL/SQL编程(四)8 触发器设计实验名称(选做实验后面加*号)9实验占课程总课时、学分比例情况实验占课程总学时的 25%学分占课程总学分的 15%实验资料存档形式(纸质/光盘)光盘3第二部分 实验说明实验说明21 实验一 了解 Oracle 的基本知识实验目的:1 熟悉 ORACLE 的环境,学习使用 SQL*Plus 与 ORACLE 进行交互。2 掌握用户的建立、删除、角色的授权以及用户密码的修改。3 掌握连接数据库以及断开连接的方法。4 建立基本的数据库表,学习简单的查询。5学会表结构的修改、显示

7、与删除。6学习提交与回滚的方法。实验环境(硬/软件要求):安装 Oracle 9i实验内容:1 为自己建立用户帐号,练习如何修改用户参数。2 以新建的帐号登录数据库,建立教材第 75 页中的四张表结构并输入相应表内容。实验主要步骤:1 建立用户。2 改变用户参数。3 建立表结构。4 修改表结构。5 显示表结构。6 记录的输入及修改。7提交。评分标准:实验报告占 70%,上机态度占 30%实验报告形式(纸质/电子):电子422 实验二 Oracle 中的表实验目的:1熟悉 Oracle 中的各种表。2熟悉并练习临时表的使用方法。3学会修改表属性的方法。4熟练掌握表结构的修改和删除、索引的创建与删

8、除。5熟悉数据词典中的几个视图的查看方法。实验环境(硬/软件要求):安装 Oracle 9i实验内容:1 按补充教材建立临时表,注意?处的返回结果。2 把当前用户的默认表空间改为 USERS,并把四张表移到 USERS 表空间中。3完成以下与表结构相关的操作:(1)复制表 S 的结构生成一张新表,取名为 SS;(2)在 SS 表中加入属性 TEL(CHAR 型) ;(3)将 SS 表中的属性 STATUS 类型改为 SMALLINT 型。4完成以下与索引相关的操作:(1)在 SS 表上建立 SNAME 的唯一索引;(2)在 SS 表上按 CITY 升序、SNAME 降序建立唯一索引;(3)删除

9、以上索引;(4)删除 SS 表。5熟悉并使用数据词典中的几个视图,查看自己帐户已创建的所有表的信息。实验主要步骤:1实验前根据实验内容做好书面准备。2上机验证准备好的命令正确与否,修改错误直至正确。评分标准:实验报告占 70%,上机态度占 30%实验报告形式(纸质/电子):电子523 实验三 Oracle 中的查询实验目的:1熟练掌握各种 SQL 语句的使用方法。2掌握视图的建立与删除。实验环境(硬/软件要求):安装 Oracle 9i实验内容:1 实现第三章作业中的第 5 题的 SQL 查询。2 完成以下查询:(1)按所驻城市升序、供应商号降序显示所有的供应商信息。(2)显示各供应商供应的零

10、件种类数,要求按供应种类的多少降序显示,显示的内容包括供应商号,零件种类数(提示:结果中应包括未供应零件的供应商)(3)显示所有供应了“蓝色”零件数量在 200 以上(含 200)的所有供应商信息,显示内容包括供应商号、供应商名字、所驻城市和供应数量。(4)找出供应零件总量超过 1000(含 1000)的所有供应商号,要求按供应总量多少降序排列。(5)找出零件供应总数量最多的供应商号。3 实现第三章作业第 11 题中的视图建立及查询,最后删除新建的视图。实验主要步骤:1实验前根据实验内容做好书面准备。2上机验证准备好的命令正确与否,修改错误直至正确。评分标准:实验报告占 70%,上机态度占 3

11、0%实验报告形式(纸质/电子):电子624 实验四 PL/SQL 编程(一)实验目的:1熟悉脚本的编写及执行。2了解编程的结构以及变量的声明方法以及记录类型的使用。实验环境(硬/软件要求):安装 Oracle 9i实验内容:1熟悉脚本的使用方式。2调试例、3,了解 PL/SQL 的编程风格、变量的声明方法以及记录类型的使用方法。3查询输出S1供应商的 Sname 及 City。实验主要步骤:1输入程序。2运行程序并分析结果。3修改程序,再运行程序,分析结果。评分标准:实验报告占 70%,上机态度占 30%实验报告形式(纸质/电子):电子725 实验五 PL/SQL 编程(二)实验目的:1掌握索

12、引表的定义及引用。2掌握索引表中的记录引用方法。3掌握游标的使用方法。实验环境(硬/软件要求):安装 Oracle 9i实验内容:1调试例 3,记录显示结果。2模仿例 5,分别显示供应商 S2 以及 S5 的供货情况(包括 PNO、JNO、QTY ) 。3模仿例 6,显示表 S 中每一个供应商的号码及名称。实验主要步骤:1编程序并上机调试运行。2修改程序再运行,检查结果是否正确。评分标准:实验报告占 70%,上机态度占 30%实验报告形式(纸质/电子):电子826 实验六 PL/SQL 编程(三)实验目的:1掌握游标属性的使用。2掌握各种程序控制结构的运用。实验环境(硬/软件要求):安装 Or

13、acle 9i实验内容:1模仿例 1,把其中的 EMP 表改成 P 表运行一遍,记录显示结果。2编程显示 J 表的前三条记录。3编程统计每一个供应商的供应零件总量,要求显示每一个供应商的名称以及供应总量。实验主要步骤:1实验前按实验内容编制程序。2调试程序,上机运行。评分标准:实验报告占 70%,上机态度占 30%实验报告形式(纸质/电子):电子927 实验七 PL/SQL 编程(四)实验目的:1掌握运用过程、函数的方法。2掌握程序包的编程方法。实验环境(硬/软件要求):安装 Oracle 9i实验内容:1针对 SPJ 表编一程序包,要求包含以下三个过程实现以下功能:(1)插入一条新记录(传入

14、各字段参数)(2)删除一条记录(传入 SNO、PNO 、JNO)(3)输出某供应商所提供的所有的零件号、工程号及数量(传入 SNO)实验主要步骤:1实验前书面编制程序包。2调试程序,上机运行直至程序包无语法错误。3调用程序包中的过程,验证其正确性并记录结果。评分标准:实验报告占 70%,上机态度占 30%实验报告形式(纸质/电子):电子1028 实验八 触发器设计实验目的: 1掌握 ORACLE 中各种触发器的设计方法。实验环境(硬/软件要求):安装 Oracle 9i实验内容:1实现教材 P162 中例 18 的 BEFORE 行级触发器的定义,并检测触发器是否执行。2模仿教材 P162 例

15、 19,定义 AFTER 行级触发器,当供应情况表 SPJ 的供应数量 Qty 发生变化后就自动在数量变化表 Qty_log 中增加一条相应记录。3在 S 表上创建一个触发器,要求插入的记录中 SNO 的内容均为大写字符。实验主要步骤:1按照实验内容设计触发器。2调试程序,上机运行并加以验证。评分标准:实验报告占 70%,上机态度占 30%实验报告形式(纸质/电子):电子11第三部分 实验补充教材3.1 实验一 Oracle 中的基本知识一大型数据库与单用户数据库的区别1 安全性(1) 用户权限管理(2) C/S 模式,服务器统一处理客户端的请求(3) 没有 DBF 文件,一个表可以分跨在多个

16、物理文件上,数据存放格式不公开2 并发性:用进程或线程同时处理多个用户的请求,自动进行并发控制,封锁的粒度可以到行3 分布式处理:多台服务器同时对外服务,提高处理速度及并发度4 大容量5 数据词典:定义了表的逻辑模式和物理模式,用户可以在这里找到了解数据库内容所需的所有对象二SQL*PlusSQL*Plus 是一个开发者和管理员用来与 Oracle 数据库进行交互的客户工具。它可以让用户发布 SQL 语句,编译和执行 PL/SQL 代码,从与 Oracle 相连接的命令行控制台上管理本地服务器或者网络上任何位置的服务器上的数据库。三建立用户1 如何建立用户?SQLconnect wzp/wzp

17、myoracle;SQLcreate user jxxxidentified by jxxx;SQLgrant connect,resourceto jxxx;2 如何改变用户参数?(1) 修改密码SQLconnect jxxx/jxxxmyoracle;SQLalter user jxxxidentified by jyyy;(2) 锁定帐号以及解除帐号锁定SQLconnect wzp/wzpmyoracle;SQLalter user jxxx account lock; (锁定帐号)SQL alter user jxxx account unlock; (解除帐号锁定)(3) 如何删除用

18、户SQLconnect wzp/wzpmyoracle;SQLdrop user jxxx cascade;四建表1 Oracle 中的基本数据类型12(1) char(n):定长字符串(2) varchar2(n):变长字符串(3) number(m):整数(4) number(m,n):浮点数或实数(5) date:日期2 改表alter table sadd /modify 3 显示表结构SQLdescribe s;4 删除表drop table s;五记录的输入及修改输入SQLinsert into s values();2修改SQLupdate s set 六简单查询 select

19、* from s;七提交和回滚 commit/rollback3.2 实验二 Oracle 中的表一Oracle 中的表Oracle 已经发布了新类型的表,来适应各种类型的数据存储、数据访问以及性能要求。对于所有类型的表,Oracle 都允许开发人员和管理人员规定各种表特性。我们应该理解各种表类型,以及用户为什么要选择其中一种类型,而不是其他的类型。在用户应用中,可能常规关系表就可以完成工作,然而其他类型的表可能会让工作更快速,使用更少的磁盘空间,并占用更少的处理器资源。常用的表类型有堆表、外部表、索引组织表和临时表,另外还有其他一些表类型。二堆表(heap table):是最基本的表,采用随

20、机存储的方式,在将行写入数据块的时候不会考虑其他行的存储位置,而是将数据写入第一个具有足够自由空间的段,当更新和删除行的时候,就会为新的插入提供可用空间。三外部表(rxternal tables,Oracle 9i 中才有):在数据库以外的文件系统上存储的只读表。通过使用外部表,就无须将数据复制到数据库中,并且强制更新,我们可以让数据保留在普通文件中,并且允许数据库对其进行实地读取。在这种方法中,外部应用可以采用它认为合适的方法更新数据,而且也不用调用 SQL*Loader 执行数据载入操作。13四索引组织表(IOT 表)可以存储索引这样的内容,以辅助查询性能。索引组织表会以牺牲插入和更新性能

21、为代价提供极好的查询性能。对于总是要通过特定索引访问的表,使用索引组织表来代替堆组织表可以提高性能。建立方法:create table s(snosnamestatuscityprimary)organization index/五临时表:只在事务处理或会话进行期间存在数据的表。数据会在事务处理或者会话开始以后插入临时表,当事务处理或者会话完成之后就会删除。Oracle 中,临时表只需建立一次,建议在需要临时存储数据的应用中使用临时表。例子:SQLcreate global temporary table s1_tabon commit preserve rows *规定了一个专用于会话的临时

22、表as select *from s;SQLselect count(* ) From s1_tab;?SQLcreate global temporary table s2_tabon commit delete rows *规定了一个专用于事务的临时表as select *from swhere 1=0;SQLinsert into s2_tabselect *from s;SQLselect count(* ) from s2_tab;?SQLcommit;SQLselect count(* ) from s1_tab;?SQLselect count(* ) from s2_tab;?

23、SQLdisconnectSQLconnect wzp/wzpmyoracle;SQLselect count(* ) from s1_tab;14?SQLselect count(* ) from s2_tab;?六其它表类型1 分区表:可以将非常大的表分割成较小的片段分区存放2 簇表:物理上存储在一起的两个或多个表(如 SQL 中连接的表总是会一起受到查询) ,以减少磁盘读取量。3 散列簇表:类似于簇表,只是存取行的方法不同。七表空间当使用 Oracle 管理应用数据的时候,表的特性将会决定怎样建立表,怎样在磁盘上存储表,以及当表生成和可以使用之后,应用最终执行方式。我们可以使用 Tabl

24、eSpace 子句来规定表的存储位置。该子句可选,若建表时不写该子句则把新建表放在默认表空间中,初始为system。但最好改为 users。 判定默认表空间select default_tablespacefrom user_users; 改变默认表空间(1)初建时(用 DBA 帐号登录)Create user j001identified by j001default tablespace users;(2)初建时未设,后来改(须用 DBA 帐号登录才可以改 )Alter user j001default tablespace users;(3)将表移动到新的表空间Alter table s

25、 move tablespace users;八数据词典每一个数据库都有一个数据词典,它是用户的整个 Oracle 数据库的编目。当建立用户、表、约束和其他数据库对象的时候,Oracle 都会自动维护一个在数据库中存储的项编目。用户可以通过以下几个视图得到相关的一些信息: User_tables 视图:展示当前用户所拥有的所有表的信息。SQL select table_name,tablespace_namefrom user_tablesorder by table_name; DBA_tables 视图:数据库管理员帐号可以使用它查看数据库中所有用户的表数据。SQLselect owner

26、,table_name,tablespace_namefrom dba_tableswhere owner in(WZP,J101)order by owner,tablespace_name,table_name; ALL_tables 视图:可以查看有关用户所拥有的表的信息以及用户已经被授予特权的15表的信息。SQLselect owner,table_namefrom all_tablesorder by owner,table_name;3.3 实验三 ORACLE 中的查询一复杂查询注意点a) 表别名及列别名的设置b) 连接(Oracle8i 中无法实现连接,只能用笛卡儿积代替)i.

27、 自然连接ii. 内连接iii. 外连接二其他语句a) 插入多行insert into s(sno) select distinct sno from spj;b) 生成一张新表create table 女生as select * from student where sex=F;c) 复制表结构create table 女生as select * from student where ;d) 删除表内容delete from s where 3.4 实验四 PL/SQL 编程(一)一脚本的编写及执行 在记事本中编写并以*.sql 保存 运行:路径*.sql;二PL/SQL 的来源及实质PL/

28、SQL 是 Oracle 的过程化编程语言,用户可以使用它编写用来在数据库中执行的定制程序以及过程代码。PL/SQL 程序能够存储在数据库中,用于用户应用程序和日常操作。这可以让用户在编程语言中实现与用户数据密切相关的业务逻辑。三PL/SQL 的块结构 PL/SQL 代码使用了程序块(block) ,利用模块化方式进行构建。每个程序块都是一组逻辑上的变量、可执行代码以及错误控制代码。16例:SQLset serveroutput onSQLdeclareL_number number:=1;BeginL_number:=1+1;Dbms_output.put_line(1+1|to_char(

29、L_number)|!);ExceptionWhen others thenDbms_output.put_line(We encountered an exception!);End;/ 块嵌套:程序块可以在可执行部分和异常处理部分包含另外的程序块。例:declarel_text varchar2(20);beginl_text:=First Block;Dbms_output.put_line(l_text);declarel_more_text varchar2(20);beginl_more_text:=Second Block;Dbms_output.put_line(l_more_

30、text);End;End;/四声明 变量和常量的声明i. 变量的声明declare l_number_variable number;beginl_number_variable:=50;end;以上方式等价于:declarel_number_variable number:=50;beginnull;end;ii. 常量的声明declarel_number_constant constant number:=50;beginnull;17end; 变量的作用域:在嵌套程序块中,父块本身和任何嵌套块都是在父块中定义的标识符的作用域,而在子块声明中定义的标识符只有在子块本身中才处于它的作用域

31、使用%TYPE 和%ROWTYPE%TYPE:声明类似字段的单独的变量,如 declare l_status s.status%type;定义了象 s 表的 status 那样的字段变量。%ROWTYPE:声明表示表、视图或游标的完整行的记录变量 ,如 declare l_s s%rowtype; 定义了象表 s 那样的记录类型。好处:(1)用户不需在声明的时候知道数据类型(2)如果用户正在引用的变量的数据类型发生变化,用户的%TYPE 或者%ROWTYPE也会在运行时进行改变,而用户不必重写用户的变量声明。五PL/SQL 集合在大多数编程语言中,提供这样或者那样的方式来声明对象集合都很有必要

32、。PL/SQL 中也是如此,它具有可以用于这一目的的大量集合类型。它们是: 记录:在称为记录的单独集合中可以存储一对多的标量属性 PL/SQL 表:是可以在用户的 PL/SQL 代码中使用的“表” ,只存在用户应用运行期间,非常类似于其他语言中的数组,但不能够存储在数据库表中。 VARRAY:能够在表列中存储的集合,通常用于存储小集合的固定大小的集合。 NESTED TABLE:另一种可以在表列中存储的集合,大小可变,适用于用户不知道集合大小,或者用户知道它要包含大量数据的时候。e) 记录例:SQLset serverout onSQLdeclareType location_record_t

33、ype is record(Streent_address varchar2(40),Postal_code varchar2(12),City varchar2(30),State_province varchar2(25),Country_id char(2) not null :=US);l_my_loc location_record_type;beginl_my_loc.street_address:=1 Oracle Way;l_my_loc.postal_code:=20190;l_my_loc.city:=Reston;l_my_loc.state_province:=VA;d

34、bms_output.put_line(MY LOCATION IS:);dbms_output.put_line(l_my_loc.street_address);dbms_output.put_line(l_my_loc.city|,|l_my_loc.state_province);dbms_output.put_line( |l_my_loc.postal_code);dbms_output.put_line(l_my_loc.country_id);end;/183.5 实验五 PL/SQL 编程(二)一PL/SQL 表:有时也称为索引表,是用户可以在 PL/SQL 例程中使用,能够

35、模仿数组的非永久表。用户可以定义一个 PL/SQL 表类型,然后声明这种类型的变量。接下来,用户就可以将记录增加到用户的 PL/SQL 表中,并且采用与引用数组元素大体相同的方式引用它们。1定义以及引用例 1:declare type my_text_table_type is table of varchar2(200)index by binary_integer;l_text_table my_text_table_type;beginl_text_table(1):=Some varchar2 value;l_text_table(3):=Another varchar2 value;

36、dbms_output.put_line(We have |l_text_table.count| varchar2s);dbms_output.put_line(-);dbms_output.put_line(vc2(1)=|l_text_table(1);dbms_output.put_line(vc2(2)=|l_text_table(3);end;/注意:索引算子是变量名称后面的括号中的数值。它会通知 PL/SQL 解析器,我们正在谈论由这个值唯一标识的记录,它必须是合法的 Binary_integer,但不一定是连续整数,这一点不同于数组下标。2PL/SQL 中的记录,具体要用到以下

37、几个方法:i. l_text_tables.delete(i):删除索引算子 I 所标识的表项。ii. l_text_tables.delete:删除所有表项。iii. l_text_tables:=l_empty_table:把 Null 表赋给 l_text_table,等价于.delete例 2:declare type my_text_table_type is table of varchar2(200)index by binary_integer;l_text_table my_text_table_type;l_empty_table my_text_table_type;be

38、ginl_text_table(10):=A value;l_text_table(20):=Another value;l_text_table(30):=Yet another value;dbms_output.put_line(We start with |l_text_table.count| varchar2s);dbms_output.put_line(-);19l_text_table.delete(20);dbms_output.put_line(After using the DELETE operator on the second record,);dbms_outpu

39、t.put_line(we have |l_text_table.count| varchar2s);dbms_output.put_line(-);l_text_table.delete;dbms_output.put_line(After using the DELETE operator,);dbms_output.put_line(we have |l_text_table.count| varchar2s);dbms_output.put_line(-);l_text_table(15):=Some text;l_text_table(25):=Some more text;dbms

40、_output.put_line(After some assignments,);dbms_output.put_line(we end up with |l_text_table.count| varchar2s);dbms_output.put_line(-);l_text_table:=l_empty_table;dbms_output.put_line(Once we assign our populated to an empty table,);dbms_output.put_line(we end up with |l_text_table.count| varchar2s);

41、end;/3 .First、next 和 last1. First:返回 PL/SQL 表的“第一个”或者最小的索引2. Last:返回 PL/SQL 表的 “最后一个”或者最大的索引3. Next:返回 PL/SQL 表的下一个索引例 3:(需用 scott/tigermyoracle 登录)declare type my_text_table_type is table of varchar2(200)index by binary_integer;l_text_table my_text_table_type;l_index number;beginfor emp_rec in(sele

42、ct * from emp)loopl_text_table(emp_rec.empno):=emp_rec.ename;end loop;l_index:=l_text_table.first;loopexit when l_index is null;dbms_output.put_line(l_index|:|l_text_table(l_index);l_index:=l_text_table.next(l_index);end loop;20end;/二VARRAYS:是能够在用户的表列中存储的 PL/SQL 集合。当用户建立 VARRAYS 的时候,用户必须为它提供最大的规模。例

43、4:create type employee_type as object(employee_id number,first_name varchar2(30),last_name varchar2(30);/create type employee_list_type as varray(50) of employee_type/create table departments(department_id number,department_name varchar2(30),manager employee_type,employees employee_list_type)/insert

44、 into departments(department_id,department_name,manager,employees)values(10,Accounting,employee_type(1,Danielle,Steeger),employee_list_type(employee_type(2,Madison,Sis),employee_type(3,Robert,Cabove),employee_type(4,Michelle,Sechrist)/insert into departments(department_id,department_name,manager,emp

45、loyees)values(20,Research,employee_type(11,Ricky,Lil),employee_list_type(employee_type(12,Ricky,Ricardo),21employee_type(13,Lucy,Ricardo),employee_type(14,Fred,Mertz),employee_type(15,Ethel,Mertz)/column department_name format a13column employees format a63 word_wrappedselect department_name,employe

46、esfrom departments/三Nested table:与索引表相似,区别是嵌套表可以存储在数据库的列中,而索引表则不行。四游标:是构建在 PL/SQL 中,用来查询数据库,获取记录集合的指针,它可以让开发者一次访问一行结果集,即可以让我们以编程方式访问数据,最常使用的类型是显式游标和隐式游标。例 5:(显式游标)SQLconnect scott/tigermyoracle;declarecursor emp_cur(p_deptno in number)is select *from empwhere deptno=p_deptno;l_emp emp%rowtype;begind

47、bms_output.put_line(Getting employees for department 30);open emp_cur(30);loopfetch emp_cur into l_emp;exit when emp_cur%notfound;dbms_output.put_line(Employee no |l_emp.empno| is |l_emp.ename);end loop;close emp_cur;dbms_output.put_line(Getting employees for department 20);open emp_cur(20);loopfetch emp_cur into l_emp;exit when emp_cur%notfound;dbms_output.put_line(Employee no |l_emp.empno| is |l_emp.ename);end loop;close emp_cur;end;22/例 6:(隐式游标)declarebeginfor my_dept_rec in(select deptno,dnamefrom d

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报