第一篇:數據庫及數據庫中表的建立實驗
一、實驗目的
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;