




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、大型數(shù)據(jù)庫(kù)oracle編撰閩江學(xué)院計(jì)算機(jī)實(shí)驗(yàn)教學(xué)中心印制2010.8目錄實(shí)驗(yàn)一 oracle數(shù)據(jù)庫(kù)管理與工具使用2實(shí)驗(yàn)二 表連接、高級(jí)子查詢10實(shí)驗(yàn)三 管理存儲(chǔ)結(jié)構(gòu)、用戶、權(quán)限安全、模式和表16實(shí)驗(yàn)四 約束、索引、視圖、序列和同義詞22實(shí)驗(yàn)五 pl/sql編程基礎(chǔ)28實(shí)驗(yàn)六 觸發(fā)器、過(guò)程、函數(shù)和程序包40實(shí)驗(yàn)七 管理存儲(chǔ)結(jié)構(gòu)、備份與恢復(fù)48實(shí)驗(yàn)八 c#.net oracle數(shù)據(jù)庫(kù)編程57實(shí)驗(yàn)一 oracle數(shù)據(jù)庫(kù)管理與工具使用一、實(shí)驗(yàn)?zāi)康?. 掌握oracle的啟動(dòng)、關(guān)閉、連接和管理初始化參數(shù) 2. 熟悉em和sql*plus的使用 3. 了解用戶和模式的概念,并查詢hr模式表的數(shù)據(jù) 二、實(shí)驗(yàn)
2、環(huán)境1. 一臺(tái)pc機(jī) 2. widows xp操作系統(tǒng) 3. (oracle 10g+sql developer)或 oracle 11g 三、實(shí)驗(yàn)內(nèi)容1. 啟動(dòng)和關(guān)閉window操作系統(tǒng)的oracle服務(wù) 2. 使用sql*plus連接oracle數(shù)據(jù)庫(kù) 3. 使用sql*plus用sys用戶關(guān)閉和啟動(dòng) oracle數(shù)據(jù)庫(kù)(要用系統(tǒng)管理員的身份登陸) 4. 使用sql*plus和em企業(yè)管理器顯示所有初始化參數(shù) 5. 解鎖hr用戶 6. 使用hr用戶連接sqlplus,查詢hr模式中的表的信息。 四、實(shí)驗(yàn)步驟,觀察與記錄及結(jié)果1.啟動(dòng)和關(guān)閉window操作系統(tǒng)的oracle服務(wù)步驟(1):
3、進(jìn)入windows xp操作系統(tǒng) 控制面板-管理工具-服務(wù)啟動(dòng)以下幾個(gè)服務(wù): oracleservice(數(shù)據(jù)庫(kù)名) oracleoradb10g_home1tnslistener oracleoradb10g_home1isql*plus oracledbconsoleorcl(啟動(dòng)em需要的服務(wù))操作界面:學(xué)生操作結(jié)果界面:2.使用sql*plus連接oracle數(shù)據(jù)庫(kù)步驟(1): 進(jìn)入windows xp操作系統(tǒng) oracle - oradb10g_home1-應(yīng)用程序開(kāi)發(fā)-sql plus 輸入:用戶名:sys/orcl as sysdba 按確定。操作界面:學(xué)生代碼:步驟(2): 輸
4、入:select * from hr.employees; 按回車可以查詢?cè)摫頂?shù)據(jù)操作界面:學(xué)生代碼:學(xué)生操作結(jié)果界面:3.使用sql*plus用sys用戶關(guān)閉和啟動(dòng) oracle數(shù)據(jù)庫(kù)(要用系統(tǒng)管理員的身份登陸)步驟(1): 輸入并執(zhí)行如下sql語(yǔ)句關(guān)閉oracle數(shù)據(jù)庫(kù):shutdown immediate;學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2): 輸入select * from hr.employees; 按回車無(wú)法查詢?cè)摫頂?shù)據(jù)學(xué)生操作結(jié)果界面:步驟(3): 使用命令startup nomount; 啟動(dòng)與數(shù)據(jù)庫(kù)對(duì)應(yīng)的實(shí)例(不加載)學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(4): 使用命令alt
5、er database mount; 為未加載數(shù)據(jù)庫(kù)的實(shí)例加載數(shù)據(jù)庫(kù)學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(5): 使用命令alter database open; 將處于未打開(kāi)狀態(tài)的數(shù)據(jù)庫(kù)設(shè)置為打開(kāi)狀態(tài)學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(6): 使用命令shutdown immediate;startup;關(guān)閉數(shù)據(jù)庫(kù)然后直接啟動(dòng)實(shí)例,加載數(shù)據(jù)庫(kù),打開(kāi)數(shù)據(jù)庫(kù)學(xué)生代碼:學(xué)生操作結(jié)果界面:4.使用sql*plus和em企業(yè)管理器顯示所有初始化參數(shù)步驟(1): 在sql*plus使用命令show parameter顯示所有初始化參數(shù)學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2): 進(jìn)入ie,http:/服務(wù)器:11
6、58/em(如 http:/localhost:1158/em)進(jìn)入em登錄界面,并按指導(dǎo)界面輸入用戶名,密碼和角色操作界面:學(xué)生操作結(jié)果界面:步驟(3): 在em界面中,選擇“管理”頁(yè)面-在“數(shù)據(jù)庫(kù)管理”區(qū)-選擇“所有初始化參數(shù)”鏈接進(jìn)入所有初始化參數(shù)顯示頁(yè)面,并可進(jìn)行查詢和部分修改。學(xué)生操作結(jié)果界面:5.解鎖hr用戶步驟(1): 使用em用system或sys登錄,通過(guò)方案-用戶-編輯hr用戶為解鎖,同時(shí)修改密碼。選擇hr用戶,并選擇編輯如下:學(xué)生操作結(jié)果界面:步驟(2): 在sqlplus 用system或sys登錄,使用以下命令完成hr用戶解鎖及重設(shè)密碼 alter user hr a
7、ccount unlock; alter user hr identified by hr;學(xué)生代碼:學(xué)生操作結(jié)果界面:6.使用hr用戶連接sqlplus,查詢hr模式中的表的信息。步驟(1): 連接:connect hr/hr;查hr模式有哪些表:select table_name from user_tables;查詢employees表內(nèi)容: select * from employees;學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2): 查詢vendition模式“客戶信息”表;connect vendition/vendition;select * from 客戶信息;查詢結(jié)果應(yīng)該包括客戶信
8、息的所有列,并且包括該表的所有記錄行。學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(3): 查詢“客戶信息”表“客戶姓名”、“客戶地址”和“聯(lián)系電話”列內(nèi)容:學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(4): 在下面的select語(yǔ)句中,將使用where子句以限定檢索的客戶信息。select 客戶姓名,客戶地址,聯(lián)系電話 from 客戶信息 where 所屬業(yè)務(wù)員編號(hào)=1001 ;學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(5): 下面創(chuàng)建的select語(yǔ)句用于對(duì)“客戶信息”表中的信息分組,輸入并執(zhí)行如下語(yǔ)句: select 所屬業(yè)務(wù)員編號(hào) as 業(yè)務(wù)員編號(hào),count(客戶編號(hào)) as 客戶數(shù) from 客戶信息 grou
9、p by 所屬業(yè)務(wù)員編號(hào);學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(6): 將having子句添加到剛才執(zhí)行的select語(yǔ)句中,輸入并執(zhí)行如下sql語(yǔ)句。 select 所屬業(yè)務(wù)員編號(hào) as 業(yè)務(wù)員編號(hào),count(客戶編號(hào)) as 客戶數(shù) from 客戶信息 group by 所屬業(yè)務(wù)員編號(hào) having count(客戶編號(hào))=3;學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(7): 下面的sql語(yǔ)句使用一組數(shù)據(jù)演示trunc函數(shù)與round函數(shù)之間的區(qū)別和相同點(diǎn)。select trunc(46.326,2),round(46.326,2) from dual; 運(yùn)行該語(yǔ)句中,trunc函數(shù)的返回值為46.
10、32,round函數(shù)的返回值為46.33。 select trunc(46.326),round(46.326) from dual;學(xué)生代碼:學(xué)生操作結(jié)果界面:五、實(shí)驗(yàn)練習(xí),觀察與記錄及結(jié)果步驟(1): sqlplus中sys用戶使用什么命令從當(dāng)前正在使用的spfile 建立pfile(文件路徑f:mypfile.ini)正確代碼:create pfile=f:mypfile.ini from spfile;學(xué)生代碼: 學(xué)生操作結(jié)果界面:步驟(2): sqlplus中使用什么命令查看當(dāng)前正在使用的spfile的文件路徑正確代碼:show parameter spfile;學(xué)生代碼: 學(xué)生操作
11、結(jié)果界面:六、相關(guān)知識(shí)由于實(shí)例是oracle用來(lái)管理數(shù)據(jù)庫(kù)的一個(gè)實(shí)體,在啟動(dòng)數(shù)據(jù)庫(kù)時(shí)將在內(nèi)存中創(chuàng)建與該數(shù)據(jù)庫(kù)所對(duì)應(yīng)的實(shí)例。oracle數(shù)據(jù)庫(kù)的完整啟動(dòng)過(guò)程分為如下3個(gè)步驟:創(chuàng)建并啟動(dòng)與數(shù)據(jù)庫(kù)對(duì)應(yīng)的實(shí)例。為實(shí)例加載數(shù)據(jù)庫(kù)。將數(shù)據(jù)庫(kù)設(shè)置為打開(kāi)狀態(tài)。 實(shí)驗(yàn)二 表連接、高級(jí)子查詢一、實(shí)驗(yàn)?zāi)康?. 理解什么是連接操作,如何進(jìn)行簡(jiǎn)單的連接操作,掌握如何進(jìn)行內(nèi)連接、外連接、交叉連接。 2. 創(chuàng)建返回多行的子查詢,創(chuàng)建返回單值的子查詢,掌握嵌套子查詢的使用。 二、實(shí)驗(yàn)環(huán)境1. 一臺(tái)pc機(jī) 2. widows xp操作系統(tǒng) 3. (oracle 10g+sql developer)或 oracle 11g 三、
12、實(shí)驗(yàn)內(nèi)容1. 使用sql語(yǔ)句分別進(jìn)行簡(jiǎn)單的連接操作,內(nèi)連接、外連接、交叉連接查詢。 2. 使用sql語(yǔ)句分別創(chuàng)建返回多行的子查詢,創(chuàng)建返回單值的子查詢,掌握嵌套子查詢的使用。 四、實(shí)驗(yàn)步驟,觀察與記錄及結(jié)果1.使用sql語(yǔ)句分別進(jìn)行簡(jiǎn)單的連接操作,內(nèi)連接、外連接、交叉連接查詢。步驟(1): 在sql plus中使用hr/hr連接 connect hr/hr;步驟(2): 輸入并執(zhí)行如下sql語(yǔ)句select s.sid , s.sname , s.sbirth , s.sclass ,s.saddress , c.department , c.cnamefrom student s , cla
13、ss cwhere s.sclass=c.cid;學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(3): 輸入并執(zhí)行如下sql語(yǔ)句:select s.sid , s.sname , s.sclass,s.saddress , c.department , c.cname, d.dnamefrome student s,class c , department dwhere s.sclass=c.cid and c.department=d.did;學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(4): 輸入并執(zhí)行如下sql語(yǔ)句:select s.sid , s.sname , s.sbirth, s.sclass,s.s
14、address , c.deoartment , c.cname , d.dnamefrom student s join class con s.sclass=c.cidjoin department d on c.depatment=d.did;學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(5): 輸入并執(zhí)行如下sql語(yǔ)句:select s.sid , s.sname , s.sbirth , s.sclass,s.saddress , c.department, c.cname,d.dnamefrom student s natural join class c natural join depar
15、tment dwhere d.dname=法律系 ;學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(6): 輸入并執(zhí)行如下sql語(yǔ)句:select s.sid , s.sname , s.sbirth , s.sclass, s.saddress , c.department , c.cname , d.dnamefrom student s right join class con s.sclass=c.cidright join department don c.department=d.did;學(xué)生代碼:學(xué)生操作結(jié)果界面:2.使用sql語(yǔ)句分別創(chuàng)建返回多行的子查詢,創(chuàng)建返回單值的子查詢,掌握嵌套子查詢
16、的使用。步驟(1): 輸入并執(zhí)行如下sql語(yǔ)句,此語(yǔ)句使用子查詢查詢class表,以獲取名為”06法2班”的cid列表.in關(guān)鍵字再把該返回值與student表中的cid列表進(jìn)行比較.select * from studentwhere sclass in(select cid from classwhere cname =06法2班;學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2): 輸入語(yǔ)句獲取的學(xué)生信息與上一個(gè)語(yǔ)句獲取的學(xué)生信息相同,均為屬于” 06法2班”的學(xué)生信息.學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(3): 輸入并執(zhí)行如下查詢語(yǔ)句:select * from studentwhere sclas
17、s in (select cid from classwhere department in(select did from departmentwhere dname=法律系);學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(4): 輸入并執(zhí)行如下查詢語(yǔ)句, 最內(nèi)層的select語(yǔ)句用于查詢課程名為”刑法通則”的課程代號(hào),然后上層select語(yǔ)句根據(jù)該課程代號(hào)查詢?cè)撜n程的所有成績(jī);次外層select 語(yǔ)句則使用大于等于(=)比較算符和all關(guān)鍵字,求出大于等于全部成績(jī)的所有學(xué)生編號(hào);最后由select 語(yǔ)句列出這些學(xué)生信息.select * from studentwhere sid in(select
18、sid from gradewhere score=all(select score from gradewhere coid in(select coid from courseswhere coname=刑法通則);學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(5): 輸入并執(zhí)行如下sql語(yǔ)句,與前一查詢比較兩者的運(yùn)算結(jié)果,由于使用統(tǒng)計(jì)函數(shù)max,可以確定返回的最高成績(jī)只有一個(gè),所以可以使用單值子查詢;另外由于每門(mén)課程只對(duì)一個(gè)代號(hào),雖然這里沒(méi)有使用統(tǒng)計(jì)函數(shù),但是也可以使用單值子查詢. 由此可以看出,sql語(yǔ)句是非常靈活的,可以由多種方法實(shí)現(xiàn)相同的功能.select * from studentwher
19、e sid in(select sid from gradewhere score=(select max(score) from gradewhere coid=(select coid from courses where coname=刑法通則);學(xué)生代碼:學(xué)生操作結(jié)果界面:五、實(shí)驗(yàn)練習(xí),觀察與記錄及結(jié)果步驟(1): 在hr模式中,寫(xiě)一個(gè)表連接查詢顯示那些在雇員 davies 之后入本公司工作的雇員的name 和 hire date。學(xué)生代碼: 學(xué)生操作結(jié)果界面:步驟(2): 在hr模式中,寫(xiě)一個(gè)表連接查詢顯示所有雇員的 names 和 hire dates,他們?cè)谒麄兊慕?jīng)理之前進(jìn)入本公
20、司,連同他們的經(jīng)理的名字和受雇日期一起顯示。列標(biāo)簽分別為 employee、emp hired、manager 和 mgr hired。學(xué)生代碼: 學(xué)生操作結(jié)果界面:步驟(3): 在hr模式中,寫(xiě)一個(gè)子查詢顯示所有收入高于平均薪水并且工作在有任一雇員的名字中帶有一個(gè) u 的部門(mén)的雇員的 employee numbers、last names 和 salaries。學(xué)生代碼: 學(xué)生操作結(jié)果界面:六、相關(guān)知識(shí)什么是子查詢錯(cuò)誤?子查詢常見(jiàn)的錯(cuò)誤是單行子查詢返回返回了多行,單行運(yùn)算符用于多行子查詢.如:為了糾正該錯(cuò)誤,改變下面sql的 = 操作為 in。select employee_id, last
21、_name from employees where salary =(select min(salary) from employees group by department_id);子查詢的另一個(gè)常見(jiàn)問(wèn)題是內(nèi)查詢沒(méi)有返回行。如下面sql沒(méi)有名叫 haas的雇員,所以子查詢無(wú)返回行,外查詢得到子查詢的結(jié)果 (null) 并且在 where 子句中使用該結(jié)果,外查詢找不到一個(gè) job id 等于 null 的雇員,所以也沒(méi)有行返回。如果一個(gè) job 存在 null 值,也沒(méi)有返回行,因?yàn)楸容^兩個(gè)空值還是空,因此 where 子句的條件不為 true。select last_name, job
22、_id from employees where job_id =(select job_id from employees where last_name = haas);實(shí)驗(yàn)三 管理存儲(chǔ)結(jié)構(gòu)、用戶、權(quán)限安全、模式和表一、實(shí)驗(yàn)?zāi)康?. 創(chuàng)建表空間 2. 創(chuàng)建用戶 3. 創(chuàng)建角色使得安全模式的設(shè)置和管理容易 4. 使用grant和revoke語(yǔ)句授予和撤銷對(duì)象權(quán)限 5. 創(chuàng)建表和管理表 二、實(shí)驗(yàn)環(huán)境1. 一臺(tái)pc機(jī) 2. widows xp操作系統(tǒng) 3. (oracle 10g+sql developer)或 oracle 11g 三、實(shí)驗(yàn)內(nèi)容1. 創(chuàng)建一個(gè)表空間 2. 創(chuàng)建一個(gè)用戶 3. 創(chuàng)
23、建一個(gè)用戶配置文件,并為用戶指定配置文件 4. 向用戶授予或撤銷系統(tǒng)權(quán)限,角色,授予或撤銷對(duì)象權(quán)限 5. 創(chuàng)建基本表 四、實(shí)驗(yàn)步驟,觀察與記錄及結(jié)果1.創(chuàng)建一個(gè)表空間步驟(1): 使用system/orcl登錄,創(chuàng)建一個(gè)表空間exer_tabspace,表空間的數(shù)據(jù)文件在oracle數(shù)據(jù)文件目錄,文件名為exer_tabspace.dbf 限額為100m的表空間connect system/orcl;create smallfile tablespace exer_tabspace datafile f:oracleproduct10.2.0oradataorclexer_tabspace.d
24、bf size 100m logging extent management local segment space management auto學(xué)生代碼:學(xué)生操作結(jié)果界面:2.創(chuàng)建一個(gè)用戶步驟(1): 創(chuàng)建一個(gè)用戶tempuser,該用戶的密碼是oracle,默認(rèn)表空間exer_tabspace,臨時(shí)表空間是temp。create user tempuseridentified by oracle default tablespace userstemporary tablespace tempquota unlimited on users;學(xué)生代碼:學(xué)生操作結(jié)果界面:3.創(chuàng)建一個(gè)用戶配
25、置文件,并為用戶指定配置文件步驟(1): 按如下腳本創(chuàng)建一個(gè)用戶配置文件,理解用戶配置文件的含義。create profile tempprfile limitsessions_per_user 3cpu_per_call 2000idle_time 15logical_reads_per_call 200failed_login_attempts 2學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2): 為用戶tempuser指定配置文件tempprfilealter user tempuser profile tempprfile;學(xué)生代碼:學(xué)生操作結(jié)果界面:4.向用戶授予或撤銷系統(tǒng)權(quán)限,角色,授予或撤
26、銷對(duì)象權(quán)限步驟(1): 使用system/orcl登錄,向用戶授予連接數(shù)據(jù)庫(kù)系統(tǒng)權(quán)限,向用戶tempuser授予create session。學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2): 使用system/orcl或vendition/vendition登錄,授予“vendition.商品信息”表的select 對(duì)象權(quán)限給用戶tempuser;學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(3): 使用tempuser/oracle登錄查詢vendition.商品信息學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(4): 撤銷向用戶tempuser授予的vendition.商品信息對(duì)象權(quán)限,而后再查詢?cè)搶?duì)象學(xué)生代碼:學(xué)生操作
27、結(jié)果界面:步驟(5): 撤銷向用戶tempuser授予的create session系統(tǒng)權(quán)限學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(6): 向用戶tempuser授予connect,resource角色學(xué)生代碼:學(xué)生操作結(jié)果界面:5.創(chuàng)建基本表步驟(1): 登錄到tempuser模式,在其中創(chuàng)建一個(gè)學(xué)生信息表student和一個(gè)班級(jí)信息表class。操作界面:學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2): 修改新創(chuàng)建表student的存儲(chǔ)參數(shù)。alter table student movestorage(next 32kmaxextents unlimitedpctincrease 0)學(xué)生代碼:學(xué)生操
28、作結(jié)果界面:步驟(3): 修改表class的數(shù)據(jù)塊參數(shù)。alter table classpctfree 40pctused 40;學(xué)生代碼:學(xué)生操作結(jié)果界面:五、實(shí)驗(yàn)練習(xí),觀察與記錄及結(jié)果步驟(1): 當(dāng)用戶tempuser耗盡了空間配額時(shí),為了使用戶操作可以繼續(xù)進(jìn)行,必須由dba為其分配更多或某配額。使用system/orcl連接,在users空間為tempuser改為10m限額學(xué)生代碼: 步驟(2): 創(chuàng)建驗(yàn)證密碼為private的驗(yàn)證方式角色private_role學(xué)生代碼: 六、相關(guān)知識(shí)建立角色時(shí),如果不指定任何驗(yàn)證方式,表示該角色使用非驗(yàn)證方式,也可以通過(guò)指定not identif
29、ied選項(xiàng)指定角色為非驗(yàn)證方式。使用identified by指定角色為驗(yàn)證方式。修改角色private_role不使用任何驗(yàn)證方式,可以使用如下的alter role語(yǔ)句形式。alter role private_role not identified;刪除用戶,如刪除用戶scott時(shí),由于該用戶已經(jīng)創(chuàng)建了大量的模式對(duì)象,則在刪除該用戶時(shí),系統(tǒng)將自動(dòng)提示增加 cascade 選項(xiàng),否則將返回錯(cuò)誤。drop user scott;一般情況下,分配角色是由dba完成的,如果以其他用戶的身份分配角色,則要求該用戶必須具有g(shù)rant any role 系統(tǒng)權(quán)限或角色上具有with admin opt
30、ion選項(xiàng)。grant public_role,private_role to developer with admin option;實(shí)驗(yàn)四 約束、索引、視圖、序列和同義詞一、實(shí)驗(yàn)?zāi)康?. 理解如何在表中定義各種約束,以保證數(shù)據(jù)的完整性 2. 理解索引的作用,了解oracle提供的主要索引類型,以及各自的特點(diǎn),掌握如何創(chuàng)建各種索引 3. 在用戶模式中創(chuàng)建視圖、可更新視圖,理解視圖的相關(guān)性 4. 對(duì)序列對(duì)象進(jìn)行管理 5. 管理同義詞 二、實(shí)驗(yàn)環(huán)境1. 一臺(tái)pc機(jī) 2. widows xp操作系統(tǒng) 3. (oracle 10g+sql developer)或 oracle 11g 三、實(shí)驗(yàn)內(nèi)容1
31、. 創(chuàng)建表,主鍵,外鍵,唯一和其他約束。 2. 創(chuàng)建索引,并查看索引的使用情況。 3. 創(chuàng)建視圖,查詢視圖的定義,并對(duì)視圖進(jìn)行更新。 4. 創(chuàng)建序列。 5. 創(chuàng)建公有同義詞 四、實(shí)驗(yàn)步驟,觀察與記錄及結(jié)果1.創(chuàng)建表,主鍵,外鍵,唯一和其他約束。步驟(1): 在tempuser模式中創(chuàng)建表student,class學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2): 使用sql或可視化工具創(chuàng)建表class的主鍵。操作界面:學(xué)生代碼:步驟(3): 使用sql或可視化工具創(chuàng)建表student的主鍵id,外鍵(classid)參照class(id),name唯一約束和check約束(sex=0,1) 。操作界面:
32、學(xué)生代碼:學(xué)生操作結(jié)果界面:2.創(chuàng)建索引,并查看索引的使用情況。步驟(1): 連接到school模式,使用如下語(yǔ)句在student表的sname列上創(chuàng)建b樹(shù)非唯一索引學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2): 在student的班級(jí)信息列上創(chuàng)建位圖索引:學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(3): 輸入并執(zhí)行如下語(yǔ)句,查看該語(yǔ)句是否會(huì)使用索引。set autotrace traceonly select * from student where sname=劉麗;學(xué)生代碼:學(xué)生操作結(jié)果界面:3.創(chuàng)建視圖,查詢視圖的定義,并對(duì)視圖進(jìn)行更新。步驟(1): 創(chuàng)建一個(gè)視圖student_math。這個(gè)視圖基
33、于school模式中的student表,并且該視圖只包括那些系別為“數(shù)學(xué)系”的學(xué)生信息。在創(chuàng)建視圖時(shí)使用with check option,防止更新視圖時(shí),輸入非數(shù)學(xué)系的學(xué)生信息。學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2): 創(chuàng)建一個(gè)連接視圖department_class,它包含class表中的classname列和department表的depname列,在where子句中將兩個(gè)表連接在一起。 學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(3): 查看視圖各個(gè)列是否允許更新。輸入并執(zhí)行語(yǔ)句:col owner format a20;col table_name format a20;col column_
34、name format a20;select *from user_updatable_columnswhere table_name=upper(department_class);學(xué)生代碼:學(xué)生操作結(jié)果界面:4.創(chuàng)建序列。步驟(1): 創(chuàng)建序列,序列的開(kāi)始數(shù)字為100,每次遞增1,無(wú)限增長(zhǎng)。輸入并執(zhí)行如下語(yǔ)句:學(xué)生代碼:學(xué)生操作結(jié)果界面:5. 創(chuàng)建公有同義詞步驟(1): 創(chuàng)建公有同義詞hr_emp 為hr.employees,輸入并執(zhí)行如下語(yǔ)句:學(xué)生代碼:學(xué)生操作結(jié)果界面:五、實(shí)驗(yàn)練習(xí),觀察與記錄及結(jié)果步驟(1): 在hr模式中,創(chuàng)建一個(gè)名為salary_vu的視圖,該視圖基于所有雇員的名
35、字、部門(mén)名、薪水和薪水級(jí)別。用employees、departments和job_grades表,分別命名列標(biāo)簽為employee、department、salary和grade。學(xué)生代碼: 步驟(2): 顯示存在于數(shù)據(jù)字典中對(duì)于 emp 表的索引和唯一性。學(xué)生代碼: 六、相關(guān)知識(shí)視圖有兩種分類:簡(jiǎn)單和復(fù)雜,基本區(qū)別涉及dml (insert、update和delete) 操作。簡(jiǎn)單視圖: 數(shù)據(jù)僅來(lái)自一個(gè)表, 不包含函數(shù)或數(shù)據(jù)分組, 能通過(guò)視圖執(zhí)行dml操作復(fù)雜視圖: 數(shù)據(jù)來(lái)自多個(gè)表, 包含函數(shù)或數(shù)據(jù)分組,不總是允許通過(guò)視圖進(jìn)行dml操作什么時(shí)候應(yīng)該創(chuàng)建索引,如果:(1)一個(gè)列包含一個(gè)大范圍的
36、值(2)一個(gè)列包含很多的空值(3)一個(gè)或多個(gè)列經(jīng)常同時(shí)在一個(gè)where子句中或一個(gè)連接條件中被使用(4)表很大,并且經(jīng)常的查詢期望取回少于百分之2 到4 的行多不什么時(shí)候通常不值得創(chuàng)建索引,如果:(1)表很小(2)不經(jīng)常在查詢中作為條件被使用的列(3)大多數(shù)查詢期望取回多于表中百分之2 到4 的行(4)表經(jīng)常被更新(5)被索引的列作為表達(dá)式的的一部分被引用實(shí)驗(yàn)五 pl/sql編程基礎(chǔ)一、實(shí)驗(yàn)?zāi)康?. 學(xué)習(xí)pl/sql程序塊的結(jié)構(gòu),了解oracle匿名程序塊 2. pl/sql程序中使用的數(shù)據(jù)類型 3. 如何在pl/sql中使用各種變量和常量 4. pl/sql程序的條件判斷語(yǔ)句 5. pl/s
37、ql程序的循環(huán)控制語(yǔ)句 6. 在pl/sql程序中使用游標(biāo)處理表中的信息 7. 在pl/sql程序中使用異常處理 二、實(shí)驗(yàn)環(huán)境1. 一臺(tái)pc機(jī) 2. widows xp操作系統(tǒng) 3. (oracle 10g+sql developer)或 oracle 11g 三、實(shí)驗(yàn)內(nèi)容1. pl/sql程序,變量的使用(標(biāo)量變量或復(fù)合變量)。 2. pl/sql程序的條件判斷語(yǔ)句和循環(huán)控制語(yǔ)句 3. 使用游標(biāo)(隱式游標(biāo),顯式游標(biāo),循環(huán)游標(biāo),動(dòng)態(tài)游標(biāo) 4. 異常處理(預(yù)定義,非預(yù)定義和用戶自定義的異常) 四、實(shí)驗(yàn)步驟,觀察與記錄及結(jié)果1.pl/sql程序,變量的使用(標(biāo)量變量或復(fù)合變量)。步驟(1): 在s
38、ql*plus中連接到school模式: 輸入如下語(yǔ)句:在該程序中定義一個(gè)number類型的變量,為其賦值89。當(dāng)運(yùn)行時(shí),程序塊中的update 語(yǔ)句將使用此值修改grade中的分?jǐn)?shù)score 字段。connect school/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;學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2):
39、sql*plus中輸入如下語(yǔ)句:運(yùn)行該程序?qū)@示編號(hào)為s06037201的學(xué)生姓名。set serveroutput on; declarevar_name student.sname%type;beginselect snameinto var_namefrom studentwhere sid=s06037201;dbms_output.put_line(var_name);end;學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(3): 在sql*plus中輸入如下程序,使用記錄(record)以顯示某學(xué)生信息:set serveroutput on; declaretype student_info
40、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;學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(4): sql*plus中修改以上程序,使用rowtype替換record,
41、以顯示student表中sid=s06037201的信息。學(xué)生代碼:學(xué)生操作結(jié)果界面:2.pl/sql程序的條件判斷語(yǔ)句和循環(huán)控制語(yǔ)句步驟(1): 條件語(yǔ)句if(if then.elseend if)。輸入并執(zhí)行如下語(yǔ)句:set serveroutput on;declare number1 integer:=80; number2 integer:=90;begin if number1=number2 then dbms_output.put_line(number1 |=|number2); else dbms_output.put_line(number1 |=|number2); e
42、nd if;end;/學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2): 循環(huán)語(yǔ)句 while。輸入并執(zhí)行如下語(yǔ)句:set serveroutput on;declarei number:=1;beginwhile i50 loopif mod(i,3)=0 thendbms_output.put_line(i | );end if;i:=i+1;end loop;end;/學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(3): 條件語(yǔ)句case和循環(huán)while結(jié)合。輸入并執(zhí)行如下語(yǔ)句:set serveroutput on;declare i number:=0;begin while i10; end loop;
43、end;/學(xué)生代碼:學(xué)生操作結(jié)果界面:3.使用游標(biāo)(隱式游標(biāo),顯式游標(biāo),循環(huán)游標(biāo),動(dòng)態(tài)游標(biāo)步驟(1): 隱式游標(biāo),它不需要用戶顯示定義、打開(kāi)等操作,就可以瀏覽數(shù)據(jù)庫(kù)中的表?,F(xiàn)在使用該語(yǔ)句瀏覽school 模式中的student 表。操作界面:學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2): 使用顯式游標(biāo)。這次使用不帶參數(shù)的顯式游標(biāo),瀏覽school模式中的student表。在sql*plus中輸入并執(zhí)行如下語(yǔ)句:操作界面:學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(3): 使用游標(biāo)變量。游標(biāo)變量是動(dòng)態(tài)的,可以在打開(kāi)游標(biāo)時(shí)指定游標(biāo)所使用的select語(yǔ)句。 在sql*plus中輸入并執(zhí)行如下sql 語(yǔ)句,該語(yǔ)句通
44、過(guò)游標(biāo)變量瀏覽student 表:操作界面:學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(4): 下一個(gè)要使用的游標(biāo)是更新游標(biāo)。更新游標(biāo)需要使用 for update子句。在sql*plus中輸入并執(zhí)行如下語(yǔ)句:執(zhí)行該語(yǔ)句后,將修改grade表中所有score列值小于60的行。學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(5): 使用循環(huán)游標(biāo)瀏覽student 表:操作界面:學(xué)生代碼:學(xué)生操作結(jié)果界面:4.異常處理(預(yù)定義,非預(yù)定義和用戶自定義的異常)步驟(1): 使用scott/tiger(密碼可以使用sys修改)登錄,輸入并執(zhí)行如下語(yǔ)句,了解預(yù)定義異常的使用:connect scott/tiger;set ser
45、veroutput on;begin insert into emp(empno,ename,job,sal,deptno) values(7369,atg,clerk,1500,20);exception when dup_val_on_index then dbms_output.put_line(捕獲dup_val_on_index異常); dbms_output.put_line(該主鍵已經(jīng)存在);end;/學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2): 使用scott/tiger登錄,輸入并執(zhí)行如下語(yǔ)句,了解未知異常的處理:set serveroutput on;declare emp_r
46、ow emp%rowtype;begin select * into emp_row from emp where deptno=10;exception when others then dbms_output.put_line(異常錯(cuò)誤(|sqlcode|); dbms_output.put_line(sqlerrm);end;/學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(3): 使用scott/tiger登錄,輸入并執(zhí)行如下語(yǔ)句,了解非預(yù)定義異常的使用:set serveroutput on;declare fk_delete_exception exception; pragma excepti
47、on_init(fk_delete_exception,-2292);begin delete dept where deptno=20;exception when fk_delete_exception then dbms_output.put_line(該記錄被另一個(gè)表外鍵引用不能刪除);end;/學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(4): 使用scott/tiger登錄,輸入并執(zhí)行如下語(yǔ)句,了解用戶自定義異常的使用:declare salary_error exception; var_sal emp.sal%type;begin select sal into var_sal from
48、 emp where empno=7369; if var_sal=800 then raise salary_error; end if;exception when salary_error then dbms_output.put_line(薪金超過(guò)范圍);end;/學(xué)生代碼:學(xué)生操作結(jié)果界面:五、實(shí)驗(yàn)練習(xí),觀察與記錄及結(jié)果步驟(1): 輸入以下代碼學(xué)習(xí)復(fù)合變量類型table(相當(dāng)數(shù)組)的使用,并模仿該程序?qū)懗鰌l/sql塊,具有table變量下標(biāo)和內(nèi)容分別是(v_majors(1) := computer science,v_majors(2) := history, v_majors
49、(3) := economics),并在屏幕輸出 1: science2:history3:economics學(xué)生代碼: 學(xué)生操作結(jié)果界面:六、相關(guān)知識(shí)pl/sql具有用戶定義的數(shù)據(jù)類型,或者叫對(duì)象,定義和使用代碼如下:create type baseinfo as object (sex varchar2(4),name varchar2(10);-定義代碼 -使用代碼 declare rose baseinfo:=baseinfo(女,rose); begin dbms_output.put_line(rose.sex); dbms_output.put_line();
50、end; 實(shí)驗(yàn)六 觸發(fā)器、過(guò)程、函數(shù)和程序包一、實(shí)驗(yàn)?zāi)康?. 理解存儲(chǔ)過(guò)程中各種形式的參數(shù),創(chuàng)建、調(diào)用oracle存儲(chǔ)過(guò)程 2. 創(chuàng)建、調(diào)用oracle函數(shù) 3. 創(chuàng)建程序包,創(chuàng)建程序包的公有成員和私有成員 4. 理解程序包中重載的過(guò)程和函數(shù) 5. 理解使用觸發(fā)器 二、實(shí)驗(yàn)環(huán)境1. 一臺(tái)pc機(jī) 2. widows xp操作系統(tǒng) 3. (oracle 10g+sql developer)或 oracle 11g 三、實(shí)驗(yàn)內(nèi)容1. 存儲(chǔ)過(guò)程(輸入輸出參數(shù)和局部變量)定義及調(diào)用 2. 創(chuàng)建函數(shù),調(diào)用函數(shù) 3. 創(chuàng)建和使用觸發(fā)器 4. 創(chuàng)建包(包頭,包體),調(diào)用包的存儲(chǔ)過(guò)程,包的函數(shù),過(guò)程的重載 四、
51、實(shí)驗(yàn)步驟,觀察與記錄及結(jié)果1.存儲(chǔ)過(guò)程(輸入輸出參數(shù)和局部變量)定義及調(diào)用步驟(1): 不包含參數(shù)和局部變量存儲(chǔ)過(guò)程。在school模式中輸入并執(zhí)行如下語(yǔ)句:在sql*plus中執(zhí)行該語(yǔ)句,就會(huì)收到“過(guò)程已創(chuàng)建”的信息。connect school/school;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.s
52、name | ); dbms_output.put_line(student_cur.saddress);end loop;end printstudentinfo;/學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2): 調(diào)用存儲(chǔ)過(guò)程:在sql*plus中輸入并執(zhí)行如下語(yǔ)句, exec printstudentinfo; 調(diào)用過(guò)程printstudentinfo,將顯示student 表中所有學(xué)生的信息。學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(3): 編寫(xiě)一個(gè)過(guò)程,需要連接查詢3個(gè)表,以顯示學(xué)生信息,以及所在班級(jí)信息和系別信息。另外,該過(guò)程中,還需要一個(gè)輸入?yún)?shù)。輸入并執(zhí)行如下sql語(yǔ)句:操作界面:學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(4): 輸入并執(zhí)行如下pl/sql無(wú)名塊調(diào)用getstudentinfo存儲(chǔ)過(guò)程,執(zhí)行結(jié)果將顯示指定編號(hào)的學(xué)生姓名、所在班級(jí)和系的名稱。學(xué)生代碼:學(xué)生操作結(jié)果界面:2.創(chuàng)建函數(shù),調(diào)用函數(shù)步驟(1):
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 調(diào)配油企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略研究報(bào)告
- 輕質(zhì)碳酸鈉企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略研究報(bào)告
- Cr-Ni合金化對(duì)Mo-Si金屬硅化物的磨蝕和抗氧化性能研究
- 時(shí)尚挎包企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 2025年全自動(dòng)地?zé)岷銐汗┧O(shè)備項(xiàng)目建議書(shū)
- 寶石咖啡桌企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 臨床檢驗(yàn)機(jī)器人行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 版刻作品企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略研究報(bào)告
- 高密度聚乙烯樹(shù)脂(HDPE)企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略研究報(bào)告
- 論生態(tài)環(huán)境損害賠償磋商制度中的公眾參與
- GA/T 766-2020人精液PSA檢測(cè)金標(biāo)試劑條法
- 精神病醫(yī)院設(shè)置基本標(biāo)準(zhǔn)
- 工程勘察重點(diǎn)難點(diǎn)分析及解決措施
- 建筑力學(xué)(緒論)課件
- excel表格水池側(cè)壁及底板配筋計(jì)算程序(自動(dòng)版)
- 商業(yè)寫(xiě)字樓運(yùn)營(yíng)費(fèi)用
- 完整版:美制螺紋尺寸對(duì)照表(牙數(shù)、牙高、螺距、小徑、中徑外徑、鉆孔)
- FEMA:潛在的失效模式及影響分析解析課件
- 三腔二囊管的應(yīng)用和護(hù)理--PPT課件 (3)
- 流體力學(xué)第二版蔡增基課件
- 英語(yǔ)書(shū)寫(xiě)模板
評(píng)論
0/150
提交評(píng)論