第一篇:數(shù)據(jù)庫(kù)實(shí)驗(yàn)四
山東建筑大學(xué) 計(jì)算機(jī)學(xué)院 實(shí)驗(yàn)報(bào)告
班級(jí): 姓名: 學(xué)號(hào): 實(shí)驗(yàn)成績(jī):
課程:數(shù)據(jù)庫(kù) 同組者: 實(shí)驗(yàn)日期: 2018.5.22
實(shí)驗(yàn)四 數(shù)據(jù)庫(kù)安全性和完整性
一.實(shí)驗(yàn)?zāi)康?/p>
1.加深對(duì)數(shù)據(jù)庫(kù)安全性和完整性的理解 2.學(xué)會(huì)授權(quán)與回收
3.理解并體會(huì)數(shù)據(jù)庫(kù)實(shí)體完整性、參照完整性、用戶定義的完整性約束條件的作用
二.實(shí)驗(yàn)內(nèi)容
用戶 sa SQL語(yǔ)言:
select * from s;
select * from p;select * from j;select * from spj;
--1.設(shè)置用戶a對(duì)SPJ表的查詢權(quán)限。
create login a with password = 'aaaaaaaa';
create user a;
grant select on spj to a with grant option;
--2.設(shè)置用戶b對(duì)S表、P表具有修改的權(quán)限,并要求b能夠?qū)⒃摍?quán)限授予其它用戶c,并驗(yàn)證用戶c具有該權(quán)限。山東建筑大學(xué) 計(jì)算機(jī)學(xué)院 實(shí)驗(yàn)報(bào)告
班級(jí): 姓名: 學(xué)號(hào): 實(shí)驗(yàn)成績(jī):
課程:數(shù)據(jù)庫(kù) 同組者: 實(shí)驗(yàn)日期: 2018.5.22 create login b with password = 'bbbbbbbb';create login c with password = 'cccccccc';create user b;create user c;
grant select,update on s to b with grant option;
grant select,update on p to b with grant option;
--3.收回用戶a、b的權(quán)限,并驗(yàn)證用戶c權(quán)限的情況。revoke select on spj from a cascade;
revoke select, update on s from b cascade;
revoke select, update on p from b cascade;
--4.對(duì)實(shí)驗(yàn)1中創(chuàng)建的表,用圖形用戶界面建立外鍵聯(lián)系,并驗(yàn)證外鍵的作用。delete from s where sno='s1';山東建筑大學(xué) 計(jì)算機(jī)學(xué)院 實(shí)驗(yàn)報(bào)告
班級(jí): 姓名: 學(xué)號(hào): 實(shí)驗(yàn)成績(jī):
課程:數(shù)據(jù)庫(kù) 同組者: 實(shí)驗(yàn)日期: 2018.5.22
--5.對(duì)實(shí)驗(yàn)1中創(chuàng)建的表,設(shè)置零件的顏色必須在紅、橙、黃、綠、青、藍(lán)、紫 七種顏色范圍內(nèi),零件重量不能超過50的約束條件,并給這兩種約束條件命名。alter table p add constraint c1 check(color in('紅','橙','黃','綠','青','藍(lán)','紫'));
alter table p add constraint c2 check(weight <= 50);
--6.設(shè)置SPJ表中供應(yīng)零件的數(shù)量都不能超過1000 alter table spj add constraint c3 check(qit <= 1000);
--7.設(shè)置S表中的供應(yīng)商號(hào)以字母‘S’開頭 alter table s add constraint c4 check(sno like 'S%');山東建筑大學(xué) 計(jì)算機(jī)學(xué)院 實(shí)驗(yàn)報(bào)告
班級(jí): 姓名: 學(xué)號(hào): 實(shí)驗(yàn)成績(jī):
課程:數(shù)據(jù)庫(kù) 同組者: 實(shí)驗(yàn)日期: 2018.5.22
--8.驗(yàn)證各個(gè)表的實(shí)體完整性。
--驗(yàn)證P表 insert into p values('P7','齒輪','黑',40);
insert into p values('P7','齒輪','黑',50);
insert into p values('P7','齒輪','黃',20);
--驗(yàn)證SPJ表 insert into spj(qit)values(2000);
insert into spj(qit)values(999);山東建筑大學(xué) 計(jì)算機(jī)學(xué)院 實(shí)驗(yàn)報(bào)告
班級(jí): 姓名: 學(xué)號(hào): 實(shí)驗(yàn)成績(jī):
課程:數(shù)據(jù)庫(kù) 同組者: 實(shí)驗(yàn)日期: 2018.5.22
--驗(yàn)證S表
insert into s(sno)values('A1');
insert into s(sno)values('S6');
用戶a SQL語(yǔ)言:
select * from spj;
select * from s;用戶b SQL語(yǔ)言:
grant select,update
on s to c;
grant select,update on p to c;
update p set color='黃' where pno='p1';山東建筑大學(xué) 計(jì)算機(jī)學(xué)院 實(shí)驗(yàn)報(bào)告
班級(jí): 姓名: 學(xué)號(hào): 實(shí)驗(yàn)成績(jī):
課程:數(shù)據(jù)庫(kù) 同組者: 實(shí)驗(yàn)日期: 2018.5.22
update s set status=10 where sno='s1';
select * from s;用戶c SQL語(yǔ)言:
update p set color='黃' where pno='p1';
select * from p;
第二篇:數(shù)據(jù)庫(kù)實(shí)驗(yàn)
實(shí)驗(yàn)1.1 使用SQL Server工具(Microsoft SQL Server Management Studio Express)管理數(shù)據(jù)庫(kù) 實(shí)驗(yàn)內(nèi)容:
(1)使用SSMS(SQL Server Management Studio)加入實(shí)驗(yàn)數(shù)據(jù)庫(kù)。(2)使用SSMS可視化建立、修改和刪除數(shù)據(jù)庫(kù)、表。(3)使用SSMS對(duì)數(shù)據(jù)庫(kù)進(jìn)行備份和恢復(fù)。
(4)使用SSMS對(duì)表進(jìn)行查詢、插入、修改、刪除。實(shí)驗(yàn)步驟:
(1)加入School數(shù)據(jù)庫(kù)。(2)建立Test數(shù)據(jù)庫(kù)。
(3)在數(shù)據(jù)庫(kù)中建立人員表PERSON(P#,Pname,Page)。更改表設(shè)置P#為主鍵,增加屬性Ptype(類型是CHAR,長(zhǎng)度是10)。
(4)用SSMS的查詢功能(新建查詢)對(duì)PERSON表進(jìn)行查詢、插入、修改、刪除等操作:首先插入兩條記錄;修改第二條記錄;刪除第二條記錄。(5)備份Test數(shù)據(jù)庫(kù)。(6)刪除表PERSON。(7)恢復(fù)Test數(shù)據(jù)庫(kù)。(8)刪除Test數(shù)據(jù)庫(kù)。
第三篇:數(shù)據(jù)庫(kù)實(shí)驗(yàn)
3.實(shí)驗(yàn)步驟
在學(xué)生選課數(shù)據(jù)庫(kù)中實(shí)現(xiàn)其查詢操作,寫出T-SQL語(yǔ)句(注:學(xué)生選課數(shù)據(jù)庫(kù)為前三次實(shí)驗(yàn)課所建立的數(shù)
據(jù)庫(kù))
一、簡(jiǎn)單查詢實(shí)驗(yàn)
(1)查詢選修了課程的學(xué)生學(xué)號(hào)。
(2)查詢選修課程號(hào)為0101的學(xué)生學(xué)號(hào)和成績(jī),并要求對(duì)查詢結(jié)果按成績(jī)降序排列,如果成績(jī)相同則按
學(xué)號(hào)升序排列。
(3)查詢選修課程號(hào)為0101的成績(jī)?cè)?0~90分之間的學(xué)生學(xué)號(hào)和成績(jī),并將成績(jī)乘以系數(shù)0.8輸出。
二、連接查詢實(shí)驗(yàn)
(1)查詢每個(gè)學(xué)生的情況以及他(她)所選修的課程。
(2)查詢選修離散散學(xué)課程且成績(jī)?yōu)?0分以上的學(xué)生學(xué)號(hào)、姓名及成績(jī)。
(3)查詢每一門課的間接先行課(即先行課的先行課)
三、嵌套查詢操作
(1)查詢0101課程的成績(jī)高于張林的學(xué)生學(xué)號(hào)和成績(jī)。
(2)查詢其他系中年齡小于計(jì)算機(jī)系年齡最大者的學(xué)生。
(3)查詢同王洪敏“數(shù)據(jù)庫(kù)原理”課程分?jǐn)?shù)相同的學(xué)生的學(xué)號(hào)。
(4)查詢選修了全部課程的學(xué)生的姓名。
(5)查詢與學(xué)號(hào)為09001103的學(xué)生所選修的全部課程相同的學(xué)生學(xué)號(hào)和姓名。
(6)查詢至少選修了學(xué)號(hào)為09001103的學(xué)生所選修的全部課程的學(xué)生學(xué)號(hào)和姓名。
四、組合查詢和分組查詢
(1)查找選修“計(jì)算機(jī)基礎(chǔ)”課程的學(xué)生成績(jī)比此課程的平均成績(jī)大的學(xué)生學(xué)號(hào)、成績(jī)。
(2)查詢年齡大于女同學(xué)平均年齡的男同學(xué)姓名和年齡。
(3)列出各系學(xué)生的總?cè)藬?shù),并按人數(shù)進(jìn)行降序排列。
(5)查詢選修計(jì)算機(jī)基礎(chǔ)和離散數(shù)學(xué)的學(xué)生學(xué)號(hào)和平均成績(jī)。
4、要求
請(qǐng)按題號(hào)依次作答,完成在word文檔中,寫明班級(jí)學(xué)號(hào)姓名,于周日之于周日之前發(fā)至xcf7@163.com,獨(dú)立完成,嚴(yán)禁抄
第四篇:大學(xué)生數(shù)據(jù)庫(kù)實(shí)驗(yàn)課實(shí)驗(yàn)四報(bào)告
《數(shù)據(jù)庫(kù)技術(shù)及應(yīng)用》
實(shí)驗(yàn)四、SQL語(yǔ)言數(shù)據(jù)定義語(yǔ)言DDL
學(xué)生姓名
學(xué)生班級(jí)
學(xué)生學(xué)號(hào)
指導(dǎo)老師
重慶郵電大學(xué)計(jì)算機(jī)學(xué)院 計(jì)算機(jī)專業(yè)實(shí)驗(yàn)中心 一. 實(shí)驗(yàn)內(nèi)容
在 Navicat for MySQL 中使用 CREATE 命令完成對(duì)表、索引、視圖、同義詞 的創(chuàng)建,使用 DROP 命令完成對(duì)表、索引、視圖、同義詞的刪除,使用 ALTER 命 令對(duì)表結(jié)構(gòu)進(jìn)行修改及完整性約束的增加、刪除。
二. 實(shí)驗(yàn)步驟
1.啟動(dòng) Navicat for MySQL,在 MySQL – 新建連接中完成連接參數(shù)配置。2.登錄到本地?cái)?shù)據(jù)庫(kù)服務(wù)器后,連接到 test 數(shù)據(jù)庫(kù)上。3.用 SQL 語(yǔ)句(如下),建立如下所示的表 student;
4.同理
5.同理
6.用 Drop Table 語(yǔ)句刪除表 CourseAa。
7.用 Alter Table 語(yǔ)句更新表 ChooseBb,添加一個(gè)屬性名 Bb4,類型 Varchar, 長(zhǎng)度 20,完整性約束設(shè)為非空值,缺省值設(shè)為字符“系統(tǒng)測(cè)試值”。
8.用 Alter Table 語(yǔ)句更新表 ChooseBb,添加一個(gè)屬性名 Bb5,類型 Varchar, 長(zhǎng)度 10,完整性約束設(shè)為主碼。完成后,表 ChooseBb 的設(shè)計(jì)如下所示。
9.用 Create View 語(yǔ)句建立一個(gè)視圖 View_Choosebb,生成的視圖屬性名(View_bb1,View_bb2,view_bb3), 其中 View_bb1 對(duì)應(yīng)于基表 ChooseBb 的 Bb1、View_bb2 對(duì)應(yīng)于基表 ChooseBb 的 Bb4、view_bb3 對(duì)應(yīng)于基表 ChooseBb 的 Bb5。完成后,視圖 View_Choosebb 的設(shè)計(jì)如下所示。
10.用 Drop View 語(yǔ)句刪除視圖 View_Choosebb。
11.用 Create Index 語(yǔ)句對(duì)表 ChooseBb 的 Bb2 屬性建立一個(gè)升序索引,索引名 Index_bb2。用 Create Index 語(yǔ)句對(duì)表 ChooseBb 的 Bb4 屬性建立一個(gè)降序索引,索引名 Index_bb4。
12.用 Drop Index 語(yǔ)句刪除索引 Index_bb2。
三. 心得體會(huì)
因?yàn)橛欣碚撜n的基礎(chǔ),本次實(shí)驗(yàn)相對(duì)輕松,很快就完成了。不過中間出現(xiàn)了許多小錯(cuò)誤,還好及時(shí)改正了。在實(shí)踐中體會(huì)這些平時(shí)學(xué)理論未注意到的小細(xì)節(jié)才能更好的掌握知識(shí)。
第五篇:數(shù)據(jù)庫(kù)實(shí)驗(yàn)答案
實(shí)驗(yàn)四
五、實(shí)驗(yàn)方法和步驟:
1.向數(shù)據(jù)庫(kù)的USERS表空間添加一個(gè)大小為10M的數(shù)據(jù)文件userdata02.dbf。
Alter tablespace users add datafile ‘c:oracleoradataorcluserdata02.dbf’ size 10M;2.向數(shù)據(jù)庫(kù)的TEMP表空間添加一個(gè)大小為5N的臨時(shí)數(shù)據(jù)文件temp02.dbf。
Alter tablespace temp add tempfile’c:oracleoradataorcltemp02.dbf’ size 5M;3.修改userdata02.dbf為自動(dòng)增長(zhǎng)方式,每次增長(zhǎng)512k,沒有限制大小。
Alter database datafile ‘c:oracleoradataorcluserdata02.dbf’ autoextend on next 512k maxsize unlimited;
4.取消userdata02.dbf的自動(dòng)增長(zhǎng)方式。
Alter database datafile ‘c:oracleoradataorcluserdata02.dbf’ autoextend off;5.將userdata02.dbf大小設(shè)置為8MB。
Alter database datafile ‘c:oracleoradataorcluserdata02.dbf’ resize 8M;6.將userdata02.dbf設(shè)置為脫機(jī)。
Alter database datafile ‘c:oracleoradataorcluserdata02.dbf’ offline;7.將userdata02設(shè)置為聯(lián)機(jī)。
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.查詢數(shù)據(jù)文件信息(包括數(shù)據(jù)文件動(dòng)態(tài)信息;數(shù)據(jù)文件詳細(xì)信息;臨時(shí)數(shù)據(jù)文件信息)。(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;
實(shí)驗(yàn)五 表空間、段、區(qū)、塊的管理
五、實(shí)驗(yàn)方法和步驟:
1.編輯一個(gè)腳本文件TEST,腳本文件內(nèi)容為創(chuàng)建一個(gè)永久性的Student表空間,區(qū)自動(dòng)擴(kuò)展,段采用手動(dòng)管理方式,并執(zhí)行腳本文件。
Create tablespace student datafile ‘c:oracleoradataora404orcltbs1_1.dbf’ 2.為數(shù)據(jù)庫(kù)的student表空間添加一個(gè)大小為10MB的新的數(shù)據(jù)文件。
Alter tablespace student add datafile ‘c:oracleoradataora404orcltbs1_2.dbf’ size 10M 3.創(chuàng)建一個(gè)臨時(shí)表空間mytemp,并為臨時(shí)表空間添加一個(gè)大小為10MB的臨時(shí)數(shù)據(jù)文件。
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表空間新添加的數(shù)據(jù)文件的大小改為20MB。
Alter database datafile c:oracleoradataora404orcltbs1_2.dbf’ resize 20M 5.將studnet表空間設(shè)置為offline;再設(shè)置為online。Alter tablespace student offline;Alter tablespace student online;6.將student表空間設(shè)置為只讀狀態(tài)。Alter tablespace student read only;7.為student表空間創(chuàng)建一個(gè)回退段。
Create rollback segment student_roll tablespace student;8.刪除student表空間及其所有內(nèi)容。
Drop tablespace student including contents;9.查詢表空間基本信息。
Select tablespace_name, extent_management,a llocation_type, contents from DBA_TABLESPACE;10.查詢表空間數(shù)據(jù)文件信息。
Select file_name, blocks, tablespace_name from DBA_DATA_FILES;11.統(tǒng)計(jì)表空間空閑空間信息。
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表的某個(gè)員工元組的物理地址(ROWID)。SELECT ROWID, EMPNO FROM SCOTT.EMP WHERE EMPNO=7369;
實(shí)驗(yàn)六 模式對(duì)象管理—基礎(chǔ)表
五、實(shí)驗(yàn)方法和步驟:
1、創(chuàng)建一個(gè)表
目標(biāo):創(chuàng)建一個(gè)名為STUDENT的表,該表有ID(學(xué)號(hào))、NAME(姓名)、SEX(性別)、COURSE(課程)、SCORE(成績(jī))字段,并保存在USER01表空間。
(1)在SQL*PLUS中執(zhí)行使用CREATE TABLE語(yǔ)句在某一表空間中創(chuàng)建STUDENTS表,并通過INSERT、SELECT、UPDATE、DELETE語(yǔ)句對(duì)表進(jìn)行操作,各舉一例。(2)通過OEM控制臺(tái)新的表,并查看新表情況。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、創(chuàng)建一個(gè)臨時(shí)表
目標(biāo):創(chuàng)建一個(gè)名為TEMP01的事務(wù)級(jí)別臨時(shí)表,該表有ID(學(xué)號(hào))、NAME(姓名)字段,并保存在temp表空間中。
Create global temporary table temp01(id number(2)primary key, name varchar(20))on commit delete rows;
3、修改表
目標(biāo):修改STUDENTS表的存儲(chǔ)參數(shù);為表分配新的存儲(chǔ)空間;添加一個(gè)新的列;設(shè)置列為無用狀態(tài)(UNUSED)。
(1)在SQL*PLUS中執(zhí)行ALTER TABLE語(yǔ)句修改STUDENTS表的存儲(chǔ)參數(shù)(修改pctfree和pctused分別為20和40)。
Alter table student pctfree 20;Alter table student ptused 40;
(2)在SQL*PLUS中執(zhí)行ALTER TABLE語(yǔ)句在STUDENTS表分配大小為400KB的新區(qū)。Alter table student allocate extent(size 400k);
(3)在SQL*PLUS中執(zhí)行ALTER TABLE語(yǔ)句在STUDENTS表新增加一個(gè)AGE列,列的類型為NUMBER(2)。Alter table student add(age number(2));
(4)在SQL*PLUS中執(zhí)行ALTER TABLE語(yǔ)句在將STUDENTS表中的AGE設(shè)置為無用狀態(tài)。Alter table student set unused(age);
4、截?cái)啾?/p>
目標(biāo):刪除表STUDENTS中的所有記錄。
(1)在SQL*PLUS中執(zhí)行TRUNCATE TABLE語(yǔ)句刪除STUDENTS表中的所有記錄。Truncate table student;
(2)在SQL*PLUS中執(zhí)行SELECT語(yǔ)句查看STUDENTS表中的內(nèi)容。Select * from student;
5、查詢ORACLE數(shù)據(jù)庫(kù)的模式對(duì)象信息
目標(biāo):使用管理工具(SQL*PLUS或OEM)獲得有關(guān)數(shù)據(jù)庫(kù)模式對(duì)象的有關(guān)信息。
(1)用SCOTT帳戶登錄SQL*PLUS,顯示用戶,并通過用戶視圖USER_TABLES、USER_VIEWS、USER_INDEXS、USER_OBJECTS、USER_TRIGGERS、USER_SEQUENCES等模式對(duì)象信息。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帳戶登錄數(shù)據(jù)庫(kù),在OME控制臺(tái)中查看SCOTT用戶的各種模式對(duì)象信息。
6、給表student表的nane列添加一個(gè)唯一值約束,并刪除該約束 Alter table student add constraint p_uk unique(name);Alter table student drop drop constraint p_uk;
實(shí)驗(yàn)七 模式對(duì)象管理—視圖
五、實(shí)驗(yàn)方法和步驟:
1、創(chuàng)建基礎(chǔ)表BOOKS,包含BOOK_ID,數(shù)字型,BOOK_NAME,可變長(zhǎng)50位,AUTHOR,可變長(zhǎng)20位,PRESS可變長(zhǎng)50位,Price數(shù)字型,PUBLISH_DATE,日期型;并插入10條數(shù)據(jù)。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、關(guān)系視圖
(1)建立關(guān)系視圖V_BOOKS,包含書名、作者、出版社。Create view v_books as
Select book_id 編號(hào),author 作者,press 出版社
from books;(2)查看視圖定義。
Select text from user_views where view_name=’VW_BOOKS’;(3)查看視圖內(nèi)容。
Select * from vw_books;
(4)修改視圖,增加一個(gè)列出版日期。
Create or replace view VW_BOOKS As
select book_id 編號(hào),author 作者,press 出版社,publishdate 出版日期
from books;(5)向基礎(chǔ)表增加一個(gè)屬性列“價(jià)格”,數(shù)字型。查看視圖的可用性狀態(tài)。
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視圖。再查看視圖的可用性狀態(tài)
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、內(nèi)嵌視圖
(1)查詢價(jià)格由高到低處于前三位的書本信息,注意采用內(nèi)嵌視圖的方式實(shí)現(xiàn)。
select * from
(select book_id,book_name ,price from books
order by price desc)where rownum<=3;
(2)利用內(nèi)嵌視圖將所有書籍的價(jià)格增加10元。
update(select price from books)set price=price+10
實(shí)驗(yàn)十 PL/SQL程序結(jié)構(gòu)
五、實(shí)驗(yàn)方法和步驟:
1.在SQL*Plus中使用PL/SQL塊處理EMP表中職工號(hào)7788的職工,如果工資小于5000那么把工資更改為5000。
(1)首先采用SCOTT用戶登錄;(2)查詢7788員工的工資是多少;
(3)定義聲明塊和執(zhí)行塊,修改該員工工資;(4)再查詢?cè)搯T工工資是多少; 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.利用三種循環(huán)控制結(jié)構(gòu)向表中插入150條記錄。(1)創(chuàng)建一張表,用來記錄循環(huán)指針的值;
Create table temp_table(num_col number, info_col char(10));(2)利用LOOP循環(huán)向表中插入前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循環(huán)向表中插入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循環(huán)向表中插入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
實(shí)驗(yàn)十一 游標(biāo)
五、實(shí)驗(yàn)方法和步驟:
1.聲明顯式游標(biāo)
聲明一個(gè)游標(biāo)用來讀取基表EMP中部門號(hào)是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.游標(biāo)的應(yīng)用
(1)利用游標(biāo)修改數(shù)據(jù),如果EMP中部門號(hào)是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)利用游標(biāo),如果部門是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;
實(shí)驗(yàn)十二 存儲(chǔ)過程和函數(shù)
1.編寫一個(gè)存儲(chǔ)過程,用它顯示scott.dept、scott.emp表中各部門的名稱、員工總
數(shù)以及員工的工資總和和平均工資。
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.編寫一個(gè)函數(shù),用它計(jì)算0到指定數(shù)字(作為函數(shù)輸入?yún)?shù))之間的整數(shù)和。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;
實(shí)驗(yàn)十三 觸發(fā)器
1.編寫一個(gè)觸發(fā)器,用它把數(shù)據(jù)庫(kù)系統(tǒng)的關(guān)閉事件記錄到一個(gè)表(表結(jié)構(gòu)自己設(shè)計(jì))內(nèi)。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,'關(guān)閉數(shù)據(jù)庫(kù)');end;
2.編寫一個(gè)行觸發(fā)器,把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;