644522919《大型數(shù)據(jù)庫Oracle》實驗指導(dǎo)書_第1頁
644522919《大型數(shù)據(jù)庫Oracle》實驗指導(dǎo)書_第2頁
644522919《大型數(shù)據(jù)庫Oracle》實驗指導(dǎo)書_第3頁
644522919《大型數(shù)據(jù)庫Oracle》實驗指導(dǎo)書_第4頁
644522919《大型數(shù)據(jù)庫Oracle》實驗指導(dǎo)書_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、大型數(shù)據(jù)庫oracle編撰閩江學(xué)院計算機(jī)實驗教學(xué)中心印制2010.8目錄實驗一 oracle數(shù)據(jù)庫管理與工具使用2實驗二 表連接、高級子查詢10實驗三 管理存儲結(jié)構(gòu)、用戶、權(quán)限安全、模式和表16實驗四 約束、索引、視圖、序列和同義詞22實驗五 pl/sql編程基礎(chǔ)28實驗六 觸發(fā)器、過程、函數(shù)和程序包40實驗七 管理存儲結(jié)構(gòu)、備份與恢復(fù)48實驗八 c#.net oracle數(shù)據(jù)庫編程57實驗一 oracle數(shù)據(jù)庫管理與工具使用一、實驗?zāi)康?. 掌握oracle的啟動、關(guān)閉、連接和管理初始化參數(shù) 2. 熟悉em和sql*plus的使用 3. 了解用戶和模式的概念,并查詢hr模式表的數(shù)據(jù) 二、實驗

2、環(huán)境1. 一臺pc機(jī) 2. widows xp操作系統(tǒng) 3. (oracle 10g+sql developer)或 oracle 11g 三、實驗內(nèi)容1. 啟動和關(guān)閉window操作系統(tǒng)的oracle服務(wù) 2. 使用sql*plus連接oracle數(shù)據(jù)庫 3. 使用sql*plus用sys用戶關(guān)閉和啟動 oracle數(shù)據(jù)庫(要用系統(tǒng)管理員的身份登陸) 4. 使用sql*plus和em企業(yè)管理器顯示所有初始化參數(shù) 5. 解鎖hr用戶 6. 使用hr用戶連接sqlplus,查詢hr模式中的表的信息。 四、實驗步驟,觀察與記錄及結(jié)果1.啟動和關(guān)閉window操作系統(tǒng)的oracle服務(wù)步驟(1):

3、進(jìn)入windows xp操作系統(tǒng) 控制面板-管理工具-服務(wù)啟動以下幾個服務(wù): oracleservice(數(shù)據(jù)庫名) oracleoradb10g_home1tnslistener oracleoradb10g_home1isql*plus oracledbconsoleorcl(啟動em需要的服務(wù))操作界面:學(xué)生操作結(jié)果界面:2.使用sql*plus連接oracle數(shù)據(jù)庫步驟(1): 進(jìn)入windows xp操作系統(tǒng) oracle - oradb10g_home1-應(yīng)用程序開發(fā)-sql plus 輸入:用戶名:sys/orcl as sysdba 按確定。操作界面:學(xué)生代碼:步驟(2): 輸

4、入:select * from hr.employees; 按回車可以查詢該表數(shù)據(jù)操作界面:學(xué)生代碼:學(xué)生操作結(jié)果界面:3.使用sql*plus用sys用戶關(guān)閉和啟動 oracle數(shù)據(jù)庫(要用系統(tǒng)管理員的身份登陸)步驟(1): 輸入并執(zhí)行如下sql語句關(guān)閉oracle數(shù)據(jù)庫:shutdown immediate;學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2): 輸入select * from hr.employees; 按回車無法查詢該表數(shù)據(jù)學(xué)生操作結(jié)果界面:步驟(3): 使用命令startup nomount; 啟動與數(shù)據(jù)庫對應(yīng)的實例(不加載)學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(4): 使用命令alt

5、er database mount; 為未加載數(shù)據(jù)庫的實例加載數(shù)據(jù)庫學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(5): 使用命令alter database open; 將處于未打開狀態(tài)的數(shù)據(jù)庫設(shè)置為打開狀態(tài)學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(6): 使用命令shutdown immediate;startup;關(guān)閉數(shù)據(jù)庫然后直接啟動實例,加載數(shù)據(jù)庫,打開數(shù)據(jù)庫學(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界面中,選擇“管理”頁面-在“數(shù)據(jù)庫管理”區(qū)-選擇“所有初始化參數(shù)”鏈接進(jìn)入所有初始化參數(shù)顯示頁面,并可進(jìn)行查詢和部分修改。學(xué)生操作結(jié)果界面:5.解鎖hr用戶步驟(1): 使用em用system或sys登錄,通過方案-用戶-編輯hr用戶為解鎖,同時修改密碼。選擇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語句中,將使用where子句以限定檢索的客戶信息。select 客戶姓名,客戶地址,聯(lián)系電話 from 客戶信息 where 所屬業(yè)務(wù)員編號=1001 ;學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(5): 下面創(chuàng)建的select語句用于對“客戶信息”表中的信息分組,輸入并執(zhí)行如下語句: select 所屬業(yè)務(wù)員編號 as 業(yè)務(wù)員編號,count(客戶編號) as 客戶數(shù) from 客戶信息 grou

9、p by 所屬業(yè)務(wù)員編號;學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(6): 將having子句添加到剛才執(zhí)行的select語句中,輸入并執(zhí)行如下sql語句。 select 所屬業(yè)務(wù)員編號 as 業(yè)務(wù)員編號,count(客戶編號) as 客戶數(shù) from 客戶信息 group by 所屬業(yè)務(wù)員編號 having count(客戶編號)=3;學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(7): 下面的sql語句使用一組數(shù)據(jù)演示trunc函數(shù)與round函數(shù)之間的區(qū)別和相同點。select trunc(46.326,2),round(46.326,2) from dual; 運行該語句中,trunc函數(shù)的返回值為46.

10、32,round函數(shù)的返回值為46.33。 select trunc(46.326),round(46.326) from dual;學(xué)生代碼:學(xué)生操作結(jié)果界面:五、實驗練習(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)知識由于實例是oracle用來管理數(shù)據(jù)庫的一個實體,在啟動數(shù)據(jù)庫時將在內(nèi)存中創(chuàng)建與該數(shù)據(jù)庫所對應(yīng)的實例。oracle數(shù)據(jù)庫的完整啟動過程分為如下3個步驟:創(chuàng)建并啟動與數(shù)據(jù)庫對應(yīng)的實例。為實例加載數(shù)據(jù)庫。將數(shù)據(jù)庫設(shè)置為打開狀態(tài)。 實驗二 表連接、高級子查詢一、實驗?zāi)康?. 理解什么是連接操作,如何進(jìn)行簡單的連接操作,掌握如何進(jìn)行內(nèi)連接、外連接、交叉連接。 2. 創(chuàng)建返回多行的子查詢,創(chuàng)建返回單值的子查詢,掌握嵌套子查詢的使用。 二、實驗環(huán)境1. 一臺pc機(jī) 2. widows xp操作系統(tǒng) 3. (oracle 10g+sql developer)或 oracle 11g 三、

12、實驗內(nèi)容1. 使用sql語句分別進(jìn)行簡單的連接操作,內(nèi)連接、外連接、交叉連接查詢。 2. 使用sql語句分別創(chuàng)建返回多行的子查詢,創(chuàng)建返回單值的子查詢,掌握嵌套子查詢的使用。 四、實驗步驟,觀察與記錄及結(jié)果1.使用sql語句分別進(jìn)行簡單的連接操作,內(nèi)連接、外連接、交叉連接查詢。步驟(1): 在sql plus中使用hr/hr連接 connect hr/hr;步驟(2): 輸入并執(zhí)行如下sql語句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語句: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語句: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語句: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語句: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語句分別創(chuàng)建返回多行的子查詢,創(chuàng)建返回單值的子查詢,掌握嵌套子查詢

16、的使用。步驟(1): 輸入并執(zhí)行如下sql語句,此語句使用子查詢查詢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): 輸入語句獲取的學(xué)生信息與上一個語句獲取的學(xué)生信息相同,均為屬于” 06法2班”的學(xué)生信息.學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(3): 輸入并執(zhí)行如下查詢語句:select * from studentwhere sclas

17、s in (select cid from classwhere department in(select did from departmentwhere dname=法律系);學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(4): 輸入并執(zhí)行如下查詢語句, 最內(nèi)層的select語句用于查詢課程名為”刑法通則”的課程代號,然后上層select語句根據(jù)該課程代號查詢該課程的所有成績;次外層select 語句則使用大于等于(=)比較算符和all關(guān)鍵字,求出大于等于全部成績的所有學(xué)生編號;最后由select 語句列出這些學(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語句,與前一查詢比較兩者的運算結(jié)果,由于使用統(tǒng)計函數(shù)max,可以確定返回的最高成績只有一個,所以可以使用單值子查詢;另外由于每門課程只對一個代號,雖然這里沒有使用統(tǒng)計函數(shù),但是也可以使用單值子查詢. 由此可以看出,sql語句是非常靈活的,可以由多種方法實現(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é)果界面:五、實驗練習(xí),觀察與記錄及結(jié)果步驟(1): 在hr模式中,寫一個表連接查詢顯示那些在雇員 davies 之后入本公司工作的雇員的name 和 hire date。學(xué)生代碼: 學(xué)生操作結(jié)果界面:步驟(2): 在hr模式中,寫一個表連接查詢顯示所有雇員的 names 和 hire dates,他們在他們的經(jīng)理之前進(jìn)入本公

20、司,連同他們的經(jīng)理的名字和受雇日期一起顯示。列標(biāo)簽分別為 employee、emp hired、manager 和 mgr hired。學(xué)生代碼: 學(xué)生操作結(jié)果界面:步驟(3): 在hr模式中,寫一個子查詢顯示所有收入高于平均薪水并且工作在有任一雇員的名字中帶有一個 u 的部門的雇員的 employee numbers、last names 和 salaries。學(xué)生代碼: 學(xué)生操作結(jié)果界面:六、相關(guān)知識什么是子查詢錯誤?子查詢常見的錯誤是單行子查詢返回返回了多行,單行運算符用于多行子查詢.如:為了糾正該錯誤,改變下面sql的 = 操作為 in。select employee_id, last

21、_name from employees where salary =(select min(salary) from employees group by department_id);子查詢的另一個常見問題是內(nèi)查詢沒有返回行。如下面sql沒有名叫 haas的雇員,所以子查詢無返回行,外查詢得到子查詢的結(jié)果 (null) 并且在 where 子句中使用該結(jié)果,外查詢找不到一個 job id 等于 null 的雇員,所以也沒有行返回。如果一個 job 存在 null 值,也沒有返回行,因為比較兩個空值還是空,因此 where 子句的條件不為 true。select last_name, job

22、_id from employees where job_id =(select job_id from employees where last_name = haas);實驗三 管理存儲結(jié)構(gòu)、用戶、權(quán)限安全、模式和表一、實驗?zāi)康?. 創(chuàng)建表空間 2. 創(chuàng)建用戶 3. 創(chuàng)建角色使得安全模式的設(shè)置和管理容易 4. 使用grant和revoke語句授予和撤銷對象權(quán)限 5. 創(chuàng)建表和管理表 二、實驗環(huán)境1. 一臺pc機(jī) 2. widows xp操作系統(tǒng) 3. (oracle 10g+sql developer)或 oracle 11g 三、實驗內(nèi)容1. 創(chuàng)建一個表空間 2. 創(chuàng)建一個用戶 3. 創(chuàng)

23、建一個用戶配置文件,并為用戶指定配置文件 4. 向用戶授予或撤銷系統(tǒng)權(quán)限,角色,授予或撤銷對象權(quán)限 5. 創(chuàng)建基本表 四、實驗步驟,觀察與記錄及結(jié)果1.創(chuàng)建一個表空間步驟(1): 使用system/orcl登錄,創(chuàng)建一個表空間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)建一個用戶步驟(1): 創(chuàng)建一個用戶tempuser,該用戶的密碼是oracle,默認(rèn)表空間exer_tabspace,臨時表空間是temp。create user tempuseridentified by oracle default tablespace userstemporary tablespace tempquota unlimited on users;學(xué)生代碼:學(xué)生操作結(jié)果界面:3.創(chuàng)建一個用戶配

25、置文件,并為用戶指定配置文件步驟(1): 按如下腳本創(chuàng)建一個用戶配置文件,理解用戶配置文件的含義。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、銷對象權(quán)限步驟(1): 使用system/orcl登錄,向用戶授予連接數(shù)據(jù)庫系統(tǒng)權(quán)限,向用戶tempuser授予create session。學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2): 使用system/orcl或vendition/vendition登錄,授予“vendition.商品信息”表的select 對象權(quán)限給用戶tempuser;學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(3): 使用tempuser/oracle登錄查詢vendition.商品信息學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(4): 撤銷向用戶tempuser授予的vendition.商品信息對象權(quán)限,而后再查詢該對象學(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)建一個學(xué)生信息表student和一個班級信息表class。操作界面:學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2): 修改新創(chuàng)建表student的存儲參數(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é)果界面:五、實驗練習(xí),觀察與記錄及結(jié)果步驟(1): 當(dāng)用戶tempuser耗盡了空間配額時,為了使用戶操作可以繼續(xù)進(jìn)行,必須由dba為其分配更多或某配額。使用system/orcl連接,在users空間為tempuser改為10m限額學(xué)生代碼: 步驟(2): 創(chuàng)建驗證密碼為private的驗證方式角色private_role學(xué)生代碼: 六、相關(guān)知識建立角色時,如果不指定任何驗證方式,表示該角色使用非驗證方式,也可以通過指定not identif

29、ied選項指定角色為非驗證方式。使用identified by指定角色為驗證方式。修改角色private_role不使用任何驗證方式,可以使用如下的alter role語句形式。alter role private_role not identified;刪除用戶,如刪除用戶scott時,由于該用戶已經(jīng)創(chuàng)建了大量的模式對象,則在刪除該用戶時,系統(tǒng)將自動提示增加 cascade 選項,否則將返回錯誤。drop user scott;一般情況下,分配角色是由dba完成的,如果以其他用戶的身份分配角色,則要求該用戶必須具有g(shù)rant any role 系統(tǒng)權(quán)限或角色上具有with admin opt

30、ion選項。grant public_role,private_role to developer with admin option;實驗四 約束、索引、視圖、序列和同義詞一、實驗?zāi)康?. 理解如何在表中定義各種約束,以保證數(shù)據(jù)的完整性 2. 理解索引的作用,了解oracle提供的主要索引類型,以及各自的特點,掌握如何創(chuàng)建各種索引 3. 在用戶模式中創(chuàng)建視圖、可更新視圖,理解視圖的相關(guān)性 4. 對序列對象進(jìn)行管理 5. 管理同義詞 二、實驗環(huán)境1. 一臺pc機(jī) 2. widows xp操作系統(tǒng) 3. (oracle 10g+sql developer)或 oracle 11g 三、實驗內(nèi)容1

31、. 創(chuàng)建表,主鍵,外鍵,唯一和其他約束。 2. 創(chuàng)建索引,并查看索引的使用情況。 3. 創(chuàng)建視圖,查詢視圖的定義,并對視圖進(jìn)行更新。 4. 創(chuàng)建序列。 5. 創(chuàng)建公有同義詞 四、實驗步驟,觀察與記錄及結(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模式,使用如下語句在student表的sname列上創(chuàng)建b樹非唯一索引學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2): 在student的班級信息列上創(chuàng)建位圖索引:學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(3): 輸入并執(zhí)行如下語句,查看該語句是否會使用索引。set autotrace traceonly select * from student where sname=劉麗;學(xué)生代碼:學(xué)生操作結(jié)果界面:3.創(chuàng)建視圖,查詢視圖的定義,并對視圖進(jìn)行更新。步驟(1): 創(chuàng)建一個視圖student_math。這個視圖基

33、于school模式中的student表,并且該視圖只包括那些系別為“數(shù)學(xué)系”的學(xué)生信息。在創(chuàng)建視圖時使用with check option,防止更新視圖時,輸入非數(shù)學(xué)系的學(xué)生信息。學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2): 創(chuàng)建一個連接視圖department_class,它包含class表中的classname列和department表的depname列,在where子句中將兩個表連接在一起。 學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(3): 查看視圖各個列是否允許更新。輸入并執(zhí)行語句: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)建序列,序列的開始數(shù)字為100,每次遞增1,無限增長。輸入并執(zhí)行如下語句:學(xué)生代碼:學(xué)生操作結(jié)果界面:5. 創(chuàng)建公有同義詞步驟(1): 創(chuàng)建公有同義詞hr_emp 為hr.employees,輸入并執(zhí)行如下語句:學(xué)生代碼:學(xué)生操作結(jié)果界面:五、實驗練習(xí),觀察與記錄及結(jié)果步驟(1): 在hr模式中,創(chuàng)建一個名為salary_vu的視圖,該視圖基于所有雇員的名

35、字、部門名、薪水和薪水級別。用employees、departments和job_grades表,分別命名列標(biāo)簽為employee、department、salary和grade。學(xué)生代碼: 步驟(2): 顯示存在于數(shù)據(jù)字典中對于 emp 表的索引和唯一性。學(xué)生代碼: 六、相關(guān)知識視圖有兩種分類:簡單和復(fù)雜,基本區(qū)別涉及dml (insert、update和delete) 操作。簡單視圖: 數(shù)據(jù)僅來自一個表, 不包含函數(shù)或數(shù)據(jù)分組, 能通過視圖執(zhí)行dml操作復(fù)雜視圖: 數(shù)據(jù)來自多個表, 包含函數(shù)或數(shù)據(jù)分組,不總是允許通過視圖進(jìn)行dml操作什么時候應(yīng)該創(chuàng)建索引,如果:(1)一個列包含一個大范圍的

36、值(2)一個列包含很多的空值(3)一個或多個列經(jīng)常同時在一個where子句中或一個連接條件中被使用(4)表很大,并且經(jīng)常的查詢期望取回少于百分之2 到4 的行多不什么時候通常不值得創(chuàng)建索引,如果:(1)表很小(2)不經(jīng)常在查詢中作為條件被使用的列(3)大多數(shù)查詢期望取回多于表中百分之2 到4 的行(4)表經(jīng)常被更新(5)被索引的列作為表達(dá)式的的一部分被引用實驗五 pl/sql編程基礎(chǔ)一、實驗?zāi)康?. 學(xué)習(xí)pl/sql程序塊的結(jié)構(gòu),了解oracle匿名程序塊 2. pl/sql程序中使用的數(shù)據(jù)類型 3. 如何在pl/sql中使用各種變量和常量 4. pl/sql程序的條件判斷語句 5. pl/s

37、ql程序的循環(huán)控制語句 6. 在pl/sql程序中使用游標(biāo)處理表中的信息 7. 在pl/sql程序中使用異常處理 二、實驗環(huán)境1. 一臺pc機(jī) 2. widows xp操作系統(tǒng) 3. (oracle 10g+sql developer)或 oracle 11g 三、實驗內(nèi)容1. pl/sql程序,變量的使用(標(biāo)量變量或復(fù)合變量)。 2. pl/sql程序的條件判斷語句和循環(huán)控制語句 3. 使用游標(biāo)(隱式游標(biāo),顯式游標(biāo),循環(huán)游標(biāo),動態(tài)游標(biāo) 4. 異常處理(預(yù)定義,非預(yù)定義和用戶自定義的異常) 四、實驗步驟,觀察與記錄及結(jié)果1.pl/sql程序,變量的使用(標(biāo)量變量或復(fù)合變量)。步驟(1): 在s

38、ql*plus中連接到school模式: 輸入如下語句:在該程序中定義一個number類型的變量,為其賦值89。當(dāng)運行時,程序塊中的update 語句將使用此值修改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中輸入如下語句:運行該程序?qū)@示編號為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程序的條件判斷語句和循環(huán)控制語句步驟(1): 條件語句if(if then.elseend if)。輸入并執(zhí)行如下語句: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)語句 while。輸入并執(zhí)行如下語句: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): 條件語句case和循環(huán)while結(jié)合。輸入并執(zhí)行如下語句: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),動態(tài)游標(biāo)步驟(1): 隱式游標(biāo),它不需要用戶顯示定義、打開等操作,就可以瀏覽數(shù)據(jù)庫中的表。現(xiàn)在使用該語句瀏覽school 模式中的student 表。操作界面:學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(2): 使用顯式游標(biāo)。這次使用不帶參數(shù)的顯式游標(biāo),瀏覽school模式中的student表。在sql*plus中輸入并執(zhí)行如下語句:操作界面:學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(3): 使用游標(biāo)變量。游標(biāo)變量是動態(tài)的,可以在打開游標(biāo)時指定游標(biāo)所使用的select語句。 在sql*plus中輸入并執(zhí)行如下sql 語句,該語句通

44、過游標(biāo)變量瀏覽student 表:操作界面:學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(4): 下一個要使用的游標(biāo)是更新游標(biāo)。更新游標(biāo)需要使用 for update子句。在sql*plus中輸入并執(zhí)行如下語句:執(zhí)行該語句后,將修改grade表中所有score列值小于60的行。學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(5): 使用循環(huán)游標(biāo)瀏覽student 表:操作界面:學(xué)生代碼:學(xué)生操作結(jié)果界面:4.異常處理(預(yù)定義,非預(yù)定義和用戶自定義的異常)步驟(1): 使用scott/tiger(密碼可以使用sys修改)登錄,輸入并執(zhí)行如下語句,了解預(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í)行如下語句,了解未知異常的處理: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(異常錯誤(|sqlcode|); dbms_output.put_line(sqlerrm);end;/學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(3): 使用scott/tiger登錄,輸入并執(zhí)行如下語句,了解非預(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(該記錄被另一個表外鍵引用不能刪除);end;/學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(4): 使用scott/tiger登錄,輸入并執(zhí)行如下語句,了解用戶自定義異常的使用: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(薪金超過范圍);end;/學(xué)生代碼:學(xué)生操作結(jié)果界面:五、實驗練習(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)知識pl/sql具有用戶定義的數(shù)據(jù)類型,或者叫對象,定義和使用代碼如下: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; 實驗六 觸發(fā)器、過程、函數(shù)和程序包一、實驗?zāi)康?. 理解存儲過程中各種形式的參數(shù),創(chuàng)建、調(diào)用oracle存儲過程 2. 創(chuàng)建、調(diào)用oracle函數(shù) 3. 創(chuàng)建程序包,創(chuàng)建程序包的公有成員和私有成員 4. 理解程序包中重載的過程和函數(shù) 5. 理解使用觸發(fā)器 二、實驗環(huán)境1. 一臺pc機(jī) 2. widows xp操作系統(tǒng) 3. (oracle 10g+sql developer)或 oracle 11g 三、實驗內(nèi)容1. 存儲過程(輸入輸出參數(shù)和局部變量)定義及調(diào)用 2. 創(chuàng)建函數(shù),調(diào)用函數(shù) 3. 創(chuàng)建和使用觸發(fā)器 4. 創(chuàng)建包(包頭,包體),調(diào)用包的存儲過程,包的函數(shù),過程的重載 四、

51、實驗步驟,觀察與記錄及結(jié)果1.存儲過程(輸入輸出參數(shù)和局部變量)定義及調(diào)用步驟(1): 不包含參數(shù)和局部變量存儲過程。在school模式中輸入并執(zhí)行如下語句:在sql*plus中執(zhí)行該語句,就會收到“過程已創(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)用存儲過程:在sql*plus中輸入并執(zhí)行如下語句, exec printstudentinfo; 調(diào)用過程printstudentinfo,將顯示student 表中所有學(xué)生的信息。學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(3): 編寫一個過程,需要連接查詢3個表,以顯示學(xué)生信息,以及所在班級信息和系別信息。另外,該過程中,還需要一個輸入?yún)?shù)。輸入并執(zhí)行如下sql語句:操作界面:學(xué)生代碼:學(xué)生操作結(jié)果界面:步驟(4): 輸入并執(zhí)行如下pl/sql無名塊調(diào)用getstudentinfo存儲過程,執(zhí)行結(jié)果將顯示指定編號的學(xué)生姓名、所在班級和系的名稱。學(xué)生代碼:學(xué)生操作結(jié)果界面:2.創(chuàng)建函數(shù),調(diào)用函數(shù)步驟(1):

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論