第一篇:数据库及数据库中表的建立实验
一、实验目的
1.熟悉SQL Server2000的环境。
2.掌握企业管理器的基本使用方法,对数据库及其对象有基本了解,了解SQLServer2000 进行配置的方法。
3.掌握查询分析器的基本使用方法以及在查询分析器中实行T-SQL语句的方法。4.了解SQL Server 2000数据库的逻辑结构和物理结构。5.学会在企业管理器中创建数据库及查看数据库属性。6.学会使用T-SQL语气创建数据库。
7.了解SQL Server 2000的基本数据类型、空值的概念,以及表的结构特点。8.学会使用T-SQL语气和企业管理器创建表结构和修改表结构。
9.学会使用SQL Server 2000提供的数据完整性功能,并在创建表时定义表的数据完整性。通过实验进一步理解数据完整性的概念及分类。
二、实验内容
1.学会使用企业管理器和查询分析器管理工具。2.使用企业管理器创建数据库。
3.在查询分析器中使用T-SQL语句创建数据库。4.使用T-SQL语句创建一个图书管理数据库,数据库名为TSGL,数据文件和日志 文件的初始大小,增长方式,文件的增长上限等均可采用默认值。
5.使用T-SQL语句或企业管理器创建课本第二章习题10的SPJ数据库,可以自行定义文件大小,增长方式等。
6.查看物理磁盘目录,理解并分析SQL Server 2000数据库的存储结构。7.使用企业管理器查看数据库属性。
8.使用T-SQL语句或企业管理器对于(2)-(5)中建立的数据库进行和删除操作。
9.用企业管理器在教务管理数据库JWGL中创建学生表STUDENT,课程表COURSE,学生选课表SC。
10.用TQL语句在数据库中创建客户信息基本表CUOSTOMERS,货品信息表GOODS,订单信息表ORDERS。
11.使用T-SQL语句在SPJ数据库中建立第2章习题10中的4张表:S,P,J,SPJ.12.使用T-SQL语句在图书借阅管理数据库TSGL中建立图书,读者和借阅3个表。
三.实验环境
装有SQL Server 2000 的机子
四.实验前准备
1.要明确能够创建数据库的用户必须是系统管理员,或是被授权使用 CREATE DATABASE 语句的用户。
2.创建数据库必须要确定数据库名、所有者(即创建数据库的用户)、数 据库大小(最初的大小、最大的大小、是否允许增长及增长的方式)和存储数据的文件。
3. 确定数据库包含哪些表以及包含的各表的结构,还要了解SQL Server 的常用数据类型,以创建数据库的表。4.了解常用的创建数据库和表的方法
五.实验步骤1.打开软件,熟悉SQL Server 2000的环境 2.使用企业管理器创建数据库。
(1)打开企业管理器,创建一个数据库JWGL.(2)在数据库属性中初始化设置文件大小为20MB等等内容。3.在查询分析器中使用T-SQL语句创建数据库。(1)打开查询分析器。
(2)创建一个数据库:Market。代码如下:
4.使用T-SQL语句或企业管理器创建一个图书管理数据库,数据库名为TSGL,数 据文件和日志文件的初始大小,增长方式,文件的增长上限等均可采用默认值。(1)打开企业管理器,然后再新建一个数据库。
(2)打开数据库属性栏,在数据库属性栏里设置数据库各种属性。5.使用T-SQL语句或企业管理器创建课本第二章习题10的SPJ数据库,可以自行定义文件大小,增长方式等。(1)打开企业管理器。
(2)创建SPJ数据库,并在属性栏里设置各种属性。
6.查看物理磁盘目录,理解并分析SQL Server 2000数据库的存储结构。7.使用企业管理器查看数据库属性。8.使用T-SQL语句或企业管理器对于
(2)-(5)中建立的数据库进行和删除操作,并进一步查看物理磁盘目录。9.用企业管理器在教务管理数据库JWGL中创建学生表STUDENT,课程表COURSE,学生选课表SC。(1)打开企业管理器,在教务管理数据库JWGL中按照课本上的表结构建立学表Student、课程表Course、学生选课表SC。
(2)用TQL语句在MARKET数据库中创建客户信息基本表CUOSTOMERS,货品信表GOODS,订单信息表ORDERS。
(1)打开查询分析器,依次输入一下几段代码创建表: CREATE TABLE Customers(CustomersID int IDENTITY(1,1)PRIMARY KEY, CName varchar(8)NOT NULL, Address varchar(50), City varchar(10), Tel varchar(20)UNIQUE, Company varchar(50), Birthday datetime, Type tinyint DEFAULT 1);
CREATE TABLE Goods(GoodsID int CONSTRAINT C1 PRIMARY KEY, GoodName varchar(20)NOT NULL, Price money, Description varchar(200), Storage int, Provider varchar(50), Status tinyint DEFAULT(0));
CREATE TABLE Orders(OrderID int IDENTITY(1,1)CONSTRAINT C2 PRIMARY KEY, GoodsID Int NOT NULLREFERENCES Goods(GoodsID)ON DELETE CASCADE, CustomersID int NOT NULL FOREIGN KEY(CustomersID)REFERENCES Customers(CustomersID)ON DELETE NO ACTION, Quantity int NOT NULL CONSTRAINT C3 CHECK(Quantity >0), OrderSum money NOT NULL OrderDate datetime DEFAULT(getdate()));依次运行。
11.使用T-SQL语句在SPJ数据库中建立第2章习题10中的4张表:供应商表S,零件表P,工程项目表J,供应情况表SPJ,建表过程中定义主键、外健和其他的数据完整性。
12.使用T-SQL语句在图书借阅管理数据库TSGL中建立图书,、读者和借阅3个表,结构为:图书(书号,书名,类别,出版社,作者,定价,出版时间)
读者(借书证号,姓名,单位,性别,地址,电话号码)
借阅(书号,借书证号,借阅日期)
六、实验结果 由于篇幅原因,只截取了部分有代表性的实验结果图,这些图都是建立其他操作的基础上的。
七、评价分析及心得体会
通过这次的实验,我充分了解了SQL SEVER的企业管理器的使用方法,并且对SQL SEVER的查询分析器的使用也有了初步的了解,同时也熟练的掌握了简单表的创建与修改,相信的以后的深入学习过程中,我能更加透彻的了解并且运用它。
第二篇:数据库及数据库中表的建立实验报告
实验题目:数据库及数据库中表的建立
学院: 计算机班级:网络0803学号:
姓名:任课教师:孟彩霞时间:
一.实验目的1.熟悉SQL Server2000的环境。
2.掌握企业管理器的基本使用方法,对数据库及其对象有基本了解,了解SQL Server2000进行配置的方法。
3.掌握查询分析器的基本使用方法以及在查询分析器中实行T-SQL语气的方法。
4.了解SQL Server 2000数据库的逻辑结构和物理结构。
5.学会在企业管理器中创建数据库及查看数据库属性。
6.学会使用T-SQL语气创建数据库。
7.了解SQL Server 2000的基本数据类型、空值的概念,以及表的结构特点。
8.学会使用T-SQL语气和企业管理器创建表结构和修改表结构。
9.学会使用SQL Server 2000提供的数据完整性功能,并在创建表时定义表的数据完整性。通过实验进一步理解数据完整性的概念及分类。
二.实验内容
1.学会使用企业管理器和查询分析器管理工具。
2.使用企业管理器创建数据库。
3.在查询分析器中使用T-SQL语句创建数据库。
4.使用T-SQL语句创建一个图书管理数据库,数据库名为TSGL,数据文件和日志文件的初始大小,增长方式,文件的增长上限等均可采用默认值。
5.使用T-SQL语句或企业管理器创建课本第二章习题10的SPJ数据库,可以自行定义文件大小,增长方式等。
6.查看物理磁盘目录,理解并分析SQL Server 2000数据库的存储结构。
7.使用企业管理器查看数据库属性。
8.使用T-SQL语句或企业管理器对于(2)-(5)中建立的数据库进行和删除操作。
9.用企业管理器在教务管理数据库JWGL中创建学生表STUDENT,课程表COURSE,学生选课表SC。
10.用TQL语句在MARKET数据库中创建客户信息基本表CUOSTOMERS,货品信息表GOODS,订单信息表ORDERS。
11.使用T-SQL语句在SPJ数据库中建立第2章习题10中的4张表:S,P,J,SPJ.12.使用T-SQL语句在图书借阅管理数据库TSGL中建立图书,读者和借阅3个表。
三.实验环境
MS SQL Server 2000
四.实验前准备
五.实验步骤
1.打开软件,熟悉 SQL Server 2000的环境
2.使用企业管理器创建数据库。
(1)打开企业管理器,创建一个数据库JWGL.(2)在数据库属性中初始化设置文件大小为20MB等等内容。
3.在查询分析器中使用T-SQL语句创建数据库。
(1)打开查询分析器。
(2)创建一个数据库:Market。代码如下:
CREATE DATABASE Market
ON
(NAME=Market-data,FILENAME=’e:sq1-datamarket-data.mdf’,SIZE=10,MAXSIZE=50,FILEGROWTH=10%)
LOG ON
(NAME= NAME=Market-data,FILENAME=’e:sq1-datamarket-LOG.Ldf’,SIZE=5,MAXSIZE=15,FILEGROWTH=10%);
4.使用T-SQL语句或企业管理器创建一个图书管理数据库,数据库名为TSGL,数据文件和日志文件的初始大小,增长方式,文件的增长上限等均可采用默认值。
(1)打开企业管理器,然后再新建一个数据库。
(2)打开数据库属性栏,在数据库属性栏里设置数据库各种属性。
5.使用T-SQL语句或企业管理器创建课本第二章习题10的SPJ数据库,可以自行定义文件大小,增长方式等。
(1)打开企业管理器。
(2)创建spj数据库,并在属性栏里设置各种属性。
6.查看物理磁盘目录,理解并分析SQL Server 2000数据库的存储结构。
7.使用企业管理器查看数据库属性。
8.使用T-SQL语句或企业管理器对于(2)-(5)中建立的数据库进行和删除操作,并进一步查看物理磁盘目录。
9.用企业管理器在教务管理数据库JWGL中创建学生表STUDENT,课程表COURSE,学生选课表SC。
(1)打开企业管理器,在教务管理数据库JWGL中按照课本上的表结构建立学
生表Student、课程表Course、学生选课表SC。
(2)用TQL语句在MARKET数据库中创建客户信息基本表CUOSTOMERS,货品信息表GOODS,订单信息表ORDERS。
(1)打开查询分析器,依次输入一下几段代码创建表:
Customers 表:
CREATE TABLE Customers(CustomersID int IDENTITY(1,1)PRIMARY KEY,CName varchar(8)NOT NULL,Address varchar(50),City varchar(10),Tel varchar(20)UNIQUE,Company varchar(50),Birthday datetime,Type tinyint DEFAULT 1);
Goods 表:
CREATE TABLE Goods(GoodsID int CONSTRAINT C1 PRIMARY KEY,GoodName varchar(20)NOT NULL,Price money,Description varchar(200),Storage int,Provider varchar(50),Status tinyintDEFAULT(0));
Orders 表:
CREATE TABLE Orders(OrderID int IDENTITY(1,1)CONSTRAINT C2 PRIMARY KEY,GoodsID int NOT NULL REFERENCES Goods(GoodsID)ON DELETE CASCADE,CustomersID int NOT NULL FOREIGN KEY(CustomersID)
REFERENCES Customers(CustomersID)ON DELETE NO ACTION,Quantity int NOT NULL CONSTRAINT C3 CHECK(Quantity >0),OrderSum money NOT NULL
OrderDate datetime DEFAULT(getdate()));
依次运行。
11.使用T-SQL语句在SPJ数据库中建立第2章习题10中的4张表:供应商表S,零件表P,工程项目表J,供应情况表SPJ,建表过程中定义主键、外健和其他的数据完整性。
12.使用T-SQL语句在图书借阅管理数据库TSGL中建立图书,读者和借阅3个表,结构为:
图书(书号,书名,类别,出版社,作者,定价,出版时间)
读者(借书证号,姓名,单位,性别,地址,电话号码)
借阅(书号,借书证号,借阅日期)
六.实验结果
七.评价分析及心得体味
第三篇:数据库实验
实验1.1 使用SQL Server工具(Microsoft SQL Server Management Studio Express)管理数据库 实验内容:
(1)使用SSMS(SQL Server Management Studio)加入实验数据库。(2)使用SSMS可视化建立、修改和删除数据库、表。(3)使用SSMS对数据库进行备份和恢复。
(4)使用SSMS对表进行查询、插入、修改、删除。实验步骤:
(1)加入School数据库。(2)建立Test数据库。
(3)在数据库中建立人员表PERSON(P#,Pname,Page)。更改表设置P#为主键,增加属性Ptype(类型是CHAR,长度是10)。
(4)用SSMS的查询功能(新建查询)对PERSON表进行查询、插入、修改、删除等操作:首先插入两条记录;修改第二条记录;删除第二条记录。(5)备份Test数据库。(6)删除表PERSON。(7)恢复Test数据库。(8)删除Test数据库。
第四篇:数据库实验
3.实验步骤
在学生选课数据库中实现其查询操作,写出T-SQL语句(注:学生选课数据库为前三次实验课所建立的数
据库)
一、简单查询实验
(1)查询选修了课程的学生学号。
(2)查询选修课程号为0101的学生学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按
学号升序排列。
(3)查询选修课程号为0101的成绩在80~90分之间的学生学号和成绩,并将成绩乘以系数0.8输出。
二、连接查询实验
(1)查询每个学生的情况以及他(她)所选修的课程。
(2)查询选修离散散学课程且成绩为90分以上的学生学号、姓名及成绩。
(3)查询每一门课的间接先行课(即先行课的先行课)
三、嵌套查询操作
(1)查询0101课程的成绩高于张林的学生学号和成绩。
(2)查询其他系中年龄小于计算机系年龄最大者的学生。
(3)查询同王洪敏“数据库原理”课程分数相同的学生的学号。
(4)查询选修了全部课程的学生的姓名。
(5)查询与学号为09001103的学生所选修的全部课程相同的学生学号和姓名。
(6)查询至少选修了学号为09001103的学生所选修的全部课程的学生学号和姓名。
四、组合查询和分组查询
(1)查找选修“计算机基础”课程的学生成绩比此课程的平均成绩大的学生学号、成绩。
(2)查询年龄大于女同学平均年龄的男同学姓名和年龄。
(3)列出各系学生的总人数,并按人数进行降序排列。
(5)查询选修计算机基础和离散数学的学生学号和平均成绩。
4、要求
请按题号依次作答,完成在word文档中,写明班级学号姓名,于周日之于周日之前发至xcf7@163.com,独立完成,严禁抄
第五篇:数据库实验答案
实验四
五、实验方法和步骤:
1.向数据库的USERS表空间添加一个大小为10M的数据文件userdata02.dbf。
Alter tablespace users add datafile ‘c:oracleoradataorcluserdata02.dbf’ size 10M;2.向数据库的TEMP表空间添加一个大小为5N的临时数据文件temp02.dbf。
Alter tablespace temp add tempfile’c:oracleoradataorcltemp02.dbf’ size 5M;3.修改userdata02.dbf为自动增长方式,每次增长512k,没有限制大小。
Alter database datafile ‘c:oracleoradataorcluserdata02.dbf’ autoextend on next 512k maxsize unlimited;
4.取消userdata02.dbf的自动增长方式。
Alter database datafile ‘c:oracleoradataorcluserdata02.dbf’ autoextend off;5.将userdata02.dbf大小设置为8MB。
Alter database datafile ‘c:oracleoradataorcluserdata02.dbf’ resize 8M;6.将userdata02.dbf设置为脱机。
Alter database datafile ‘c:oracleoradataorcluserdata02.dbf’ offline;7.将userdata02设置为联机。
Alter database datafile ‘c:oracleoradataorcluserdata02.dbf’ online;8.改变userdata02的名称。
(1)alter tablespace users offline;
(2)将userdata02.dbf重命名为userdata002.dbf;(3)alter tablesace users rename datafile ‘c:oracleoradataorcluserdata02.dbf’,‘c:oracleoradataorcluserdata002.dbf’;(4)alter tablespace users online;
9.查询数据文件信息(包括数据文件动态信息;数据文件详细信息;临时数据文件信息)。(1)select name,file#,status,checkpoint_change# from V$DATAFILE;
(2)select tablespace_name,bytes,autoextensible,file_name from DBA_DATA_FILES;(3)select tablespace_name,file_name,autoextensible from DBA_TEMP_FILES;
实验五 表空间、段、区、块的管理
五、实验方法和步骤:
1.编辑一个脚本文件TEST,脚本文件内容为创建一个永久性的Student表空间,区自动扩展,段采用手动管理方式,并执行脚本文件。
Create tablespace student datafile ‘c:oracleoradataora404orcltbs1_1.dbf’ 2.为数据库的student表空间添加一个大小为10MB的新的数据文件。
Alter tablespace student add datafile ‘c:oracleoradataora404orcltbs1_2.dbf’ size 10M 3.创建一个临时表空间mytemp,并为临时表空间添加一个大小为10MB的临时数据文件。
Create temporary tablespace mytemp tempfile ‘c:oracleoradataora404orcltemp1_1.dbf’ size 20M extent management local uniform size 16M;
Alter tablespace mytemp add tempfile c:oracleoradataora404orltemp1_2.dbf’ size 10M 4.将student表空间新添加的数据文件的大小改为20MB。
Alter database datafile c:oracleoradataora404orcltbs1_2.dbf’ resize 20M 5.将studnet表空间设置为offline;再设置为online。Alter tablespace student offline;Alter tablespace student online;6.将student表空间设置为只读状态。Alter tablespace student read only;7.为student表空间创建一个回退段。
Create rollback segment student_roll tablespace student;8.删除student表空间及其所有内容。
Drop tablespace student including contents;9.查询表空间基本信息。
Select tablespace_name, extent_management,a llocation_type, contents from DBA_TABLESPACE;10.查询表空间数据文件信息。
Select file_name, blocks, tablespace_name from DBA_DATA_FILES;11.统计表空间空闲空间信息。
SELECT TABLESAPCE_NAME “TABLESPACE”, FILE_ID, COUNT(*)“PIECES”, MAX(BLOCKS)“MAXIMUM”, MIN(BLOCKS)“MINIMUM”, AVG(BLOCKS)“AVERAGE”, SUM(BLOCKS)“TOTAL” FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME, FILE_ID;
12.查询表空间空闲空间大小。
SELECT TABLESPACE_NAME, SUM(BYTES)FREE_SPACES FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME;
13.查询scott用户emp表的某个员工元组的物理地址(ROWID)。SELECT ROWID, EMPNO FROM SCOTT.EMP WHERE EMPNO=7369;
实验六 模式对象管理—基础表
五、实验方法和步骤:
1、创建一个表
目标:创建一个名为STUDENT的表,该表有ID(学号)、NAME(姓名)、SEX(性别)、COURSE(课程)、SCORE(成绩)字段,并保存在USER01表空间。
(1)在SQL*PLUS中执行使用CREATE TABLE语句在某一表空间中创建STUDENTS表,并通过INSERT、SELECT、UPDATE、DELETE语句对表进行操作,各举一例。(2)通过OEM控制台新的表,并查看新表情况。Create table student(Id number primary key, Name varchar2(20), Sex char(1),Course varchar2(20), Score number(5,2))tablespace users
Insert into student(id)values(1);Select id from student;
Update student set id=2 where id=1;Delete from student where id=2;
2、创建一个临时表
目标:创建一个名为TEMP01的事务级别临时表,该表有ID(学号)、NAME(姓名)字段,并保存在temp表空间中。
Create global temporary table temp01(id number(2)primary key, name varchar(20))on commit delete rows;
3、修改表
目标:修改STUDENTS表的存储参数;为表分配新的存储空间;添加一个新的列;设置列为无用状态(UNUSED)。
(1)在SQL*PLUS中执行ALTER TABLE语句修改STUDENTS表的存储参数(修改pctfree和pctused分别为20和40)。
Alter table student pctfree 20;Alter table student ptused 40;
(2)在SQL*PLUS中执行ALTER TABLE语句在STUDENTS表分配大小为400KB的新区。Alter table student allocate extent(size 400k);
(3)在SQL*PLUS中执行ALTER TABLE语句在STUDENTS表新增加一个AGE列,列的类型为NUMBER(2)。Alter table student add(age number(2));
(4)在SQL*PLUS中执行ALTER TABLE语句在将STUDENTS表中的AGE设置为无用状态。Alter table student set unused(age);
4、截断表
目标:删除表STUDENTS中的所有记录。
(1)在SQL*PLUS中执行TRUNCATE TABLE语句删除STUDENTS表中的所有记录。Truncate table student;
(2)在SQL*PLUS中执行SELECT语句查看STUDENTS表中的内容。Select * from student;
5、查询ORACLE数据库的模式对象信息
目标:使用管理工具(SQL*PLUS或OEM)获得有关数据库模式对象的有关信息。
(1)用SCOTT帐户登录SQL*PLUS,显示用户,并通过用户视图USER_TABLES、USER_VIEWS、USER_INDEXS、USER_OBJECTS、USER_TRIGGERS、USER_SEQUENCES等模式对象信息。Show user
Select table_name from user_tables;Select view_name from user_views;Select index_name from user_indexes;Select object_name from user_objects;Select trigger_name from user_triggers;Select sequence_name from user_sequence;
(2)使用SCOTT帐户登录数据库,在OME控制台中查看SCOTT用户的各种模式对象信息。
6、给表student表的nane列添加一个唯一值约束,并删除该约束 Alter table student add constraint p_uk unique(name);Alter table student drop drop constraint p_uk;
实验七 模式对象管理—视图
五、实验方法和步骤:
1、创建基础表BOOKS,包含BOOK_ID,数字型,BOOK_NAME,可变长50位,AUTHOR,可变长20位,PRESS可变长50位,Price数字型,PUBLISH_DATE,日期型;并插入10条数据。Create table books(Book_id number primary key, Book_name varchar2(50)not null, Author varchar2(20), Press varchar2(50), Price number, Publishdate date);
2、关系视图
(1)建立关系视图V_BOOKS,包含书名、作者、出版社。Create view v_books as
Select book_id 编号,author 作者,press 出版社
from books;(2)查看视图定义。
Select text from user_views where view_name=’VW_BOOKS’;(3)查看视图内容。
Select * from vw_books;
(4)修改视图,增加一个列出版日期。
Create or replace view VW_BOOKS As
select book_id 编号,author 作者,press 出版社,publishdate 出版日期
from books;(5)向基础表增加一个属性列“价格”,数字型。查看视图的可用性状态。
alter table boks add price int;
Select object_name,status from user_objects where object_name=’VW_BOOKS’ and object_type=’VIEW’;
(6)重新编译V_BOOKS视图。再查看视图的可用性状态
alter view vw_books compile
Select object_name,status from user_objects where object_name=’VW_BOOKS’ and object_type=’VIEW’;(7)删除该视图。
drop view vw_books;
3、内嵌视图
(1)查询价格由高到低处于前三位的书本信息,注意采用内嵌视图的方式实现。
select * from
(select book_id,book_name ,price from books
order by price desc)where rownum<=3;
(2)利用内嵌视图将所有书籍的价格增加10元。
update(select price from books)set price=price+10
实验十 PL/SQL程序结构
五、实验方法和步骤:
1.在SQL*Plus中使用PL/SQL块处理EMP表中职工号7788的职工,如果工资小于5000那么把工资更改为5000。
(1)首先采用SCOTT用户登录;(2)查询7788员工的工资是多少;
(3)定义声明块和执行块,修改该员工工资;(4)再查询该员工工资是多少; SQL>DECLARE
X NUMBER(7,2);BEGIN
SELECT sal INTO x FROM emp WHERE empno = 7788;
IF x < 5000
THEN UPDATE emp SET sal = 5000 WHERE empno = 7788;END IF;END;
2.利用三种循环控制结构向表中插入150条记录。(1)创建一张表,用来记录循环指针的值;
Create table temp_table(num_col number, info_col char(10));(2)利用LOOP循环向表中插入前50条记录; DECLARE
v_counter BINARY_INTEGER :=1;BEGIN
LOOP
INSERT INTO temp_table values(v_counter,’loop index’);
v_counter := v_counter+1;
EXIT WHEN v_counter>50;
END LOOP;END;
(3)利用WHILE循环向表中插入51-100条记录; DECLARE
v_counter BINARY_INTEGER :=1;BEGIN
WHILE v_counter<100 LOOP
INSERT INTO temp_table values(v_counter,’loop index’);
v_counter := v_counter+1;
END LOOP;END;
(4)利用FOR循环向表中插入101-150条记录; DECLARE
v_counter BINARY_INTEGER :=1;BEGIN FOR v_counter IN 101..150 LOOP
INSERT INTO temp_table values(v_counter,’loop index’);
END LOOP;END;
(5)查看表中的信息。
SLELECT * FROM TEMP_TABL
实验十一 游标
五、实验方法和步骤:
1.声明显式游标
声明一个游标用来读取基表EMP中部门号是20且工作为分析员的职工: DECLARE Cursor c1 IS
SELECT ename, sal, hiredate FROM emp WHERE deptno = 20 AND job = 'ANALYST';v_ename VARCHAR2(10);v_sal NUMBER(7,2);v_hiredate date;begin OPEN c1;
FETCH c1 INTO v_ename, v_sal, v_hiredate;CLOSE c1;end;
2.游标的应用
(1)利用游标修改数据,如果EMP中部门号是20,工作为分析员的职工工资小于5000,更改为5000: DECLARE CURSOR c1 IS
SELECT empno, sal, hiredate, rowid
FROM emp WHERE deptno = 20 AND job = 'ANALYST' FOR UPDATE OF sal;emp_record c1%ROWTYPE;BEGIN OPEN c1;LOOP
FETCH c1 INTO emp_record;EXIT WHEN c1%NOTFOUND;IF emp_record.sal <5000 THEN
UPDATE emp set sal = 5000 where empno = emp_record.empno;END IF;END LOOP;CLOSE c1;END;
(2)利用游标,如果部门是SALES,地址不是DALLAS的,地址更改为DALLAS;如果部门不是SALES,地址不是NEW YORK的,地址更改为NEW YORK: DECLARE CURSOR c1 IS SELECT dname, loc FROM dept FOR UPDATE OF loc;Dept_rec c1%ROWTYPE;BEGIN OPEN c1;LOOP
FETCH c1 INTO dept_rec;EXIT WHEN c1%NOTFOUND;
IF dept_rec.dname = 'SALES' AND dept_rec.loc!= 'DALLAS'
THEN UPDATE dept SET LOC = 'DALLAS' WHERE CURRENT OF C1;ELSE IF DEPT_REC.DNAME!= 'SALES' AND DEPT_REC.LOC!= 'NEW YORK' THEN UPDATE dept SET LOC = 'NEW YORK' WHERE CURRENT OF C1;END IF;END LOOP;CLOSE c1;END;
实验十二 存储过程和函数
1.编写一个存储过程,用它显示scott.dept、scott.emp表中各部门的名称、员工总
数以及员工的工资总和和平均工资。
set serverout on;
create or replace procedure outputEMP as begin declare
cursor cEMP is
select dname,count(*),avg(sal),sum(sal)
from scott.emp,scott.dept
where scott.emp.deptno=scott.dept.deptno
group by dname;
d_name varchar2(14);
count_EMP number;
sum_sal number(7,2);
avg_sal number(7,2);
begin
open cEMP;
fetch cEMP into d_name,count_EMP,avg_sal,sum_sal;
while cEMP %found loop
dbms_output.put_line(d_name||','||count_EMP||','||avg_sal||','||sum_sal);
fetch cEMP into d_name,count_EMP,avg_sal,sum_sal;
end loop;
close cEMP;
end;
end outputEMP;2.编写一个函数,用它计算0到指定数字(作为函数输入参数)之间的整数和。set sertverout on;
create or replace function get_sum(maxNUM number)return number as begin
declare sumNUM number;
i number;
begin
sumNUM:=0;
i:=maxNum;
while i>0 loop
sumNUM:=sumNUM+i;
i:=i-1;
end loop;
return sumNUM;
end;end get_sum;
实验十三 触发器
1.编写一个触发器,用它把数据库系统的关闭事件记录到一个表(表结构自己设计)内。Create table shutdown_log(shut_user varchar2(20),shut_time date,shut_action varchar2(20));
create or replace trigger shutdown_record before shutdown on database begin
insert into shutdown_log values(user,sysdate,'关闭数据库');end;
2.编写一个行触发器,把emp表增、删、改操作前后员工的姓名和工资前后变化情况显示处理。create or replace trigger trg_emp_dml_row
Before insert or update or delete on scott.emp
For each row
Begin
If inserting then
Dbms_output.put_line(:new.empno||’ ’||:new.ename);
Elsif updating then
Dbms_output.put_line(:old.sal||’ ’||:new.sal);
Else
Dbms_output.put_line(:old.empno||’ ’||:old.ename);
End if;
End trg_emp_dml_row;