Oracle數(shù)據(jù)庫應(yīng)用技術(shù)-實驗指導(dǎo)書_第1頁
Oracle數(shù)據(jù)庫應(yīng)用技術(shù)-實驗指導(dǎo)書_第2頁
Oracle數(shù)據(jù)庫應(yīng)用技術(shù)-實驗指導(dǎo)書_第3頁
Oracle數(shù)據(jù)庫應(yīng)用技術(shù)-實驗指導(dǎo)書_第4頁
Oracle數(shù)據(jù)庫應(yīng)用技術(shù)-實驗指導(dǎo)書_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Oracle數(shù)據(jù)應(yīng)用技術(shù)實驗指導(dǎo)書湖南工程職業(yè)技術(shù)學(xué)院(劉靜)2010年3月實驗1 Oracle入門(2學(xué)時)一、目標(biāo)1. 能夠使用Oracle Enterprise Manager Console2. 能夠創(chuàng)建表空間和用戶賬戶3. 能夠使用Oracle Net Configuration Assistant配置網(wǎng)絡(luò)服務(wù)名4. 能夠用SQL *Plus 連接Oracle服務(wù)器二、實驗內(nèi)容及要求1.實驗內(nèi)容(1)使用Oracle Enterprise Manager Console熟悉Oracle企業(yè)管理器控制臺,能夠通過圖形化的用戶界面查看Oracle數(shù)據(jù)庫的物理組件和邏輯組件,加深對Orac

2、le體系結(jié)構(gòu)的理解。分析:要熟悉Oracle數(shù)據(jù)庫,必須先安裝Oracle服務(wù)器軟件,或者安裝客戶端軟件,再通過網(wǎng)絡(luò)配置鏈接到一個遠程的Oracle服務(wù)器。假定已經(jīng)在本機上安裝了Oracle數(shù)據(jù)庫,用戶可以使用Oracle Enterprise Manager Console來管理數(shù)據(jù)庫。使用企業(yè)管理器控制臺可以執(zhí)行各項任務(wù),如管理Oracle實例、創(chuàng)建表空間、用戶賬戶、表和同義詞等。用戶需要以管理員身份登陸到Oracle數(shù)據(jù)庫進行練習(xí)。(2) 創(chuàng)建表空間GITM公司想要在數(shù)據(jù)庫總存儲員工信息、工資記錄、部門信息和產(chǎn)品信息,這些信息將存儲在不同的表中。為了與其他建立在此數(shù)據(jù)庫上的應(yīng)用系統(tǒng)實現(xiàn)存

3、儲空間的獨立,需要建一個名為GITM的表空間,此應(yīng)用系統(tǒng)的中的表都應(yīng)該存儲在此表空間中。(3) 創(chuàng)建用戶賬戶在數(shù)據(jù)庫中已創(chuàng)建GITM表空間用于存儲公司員工和部門信息表?,F(xiàn)在需要一個特定用戶,該用戶能夠訪問相關(guān)信息,并可創(chuàng)建數(shù)據(jù)庫對象,如表、視圖和索引等。要求創(chuàng)建一個用戶,并向其授予連接數(shù)據(jù)庫、創(chuàng)建模式對象和使用表空間的權(quán)限。(4) 使用Oracle Net Configuration AssistantOracle數(shù)據(jù)庫服務(wù)器可以被多個用戶訪問以執(zhí)行不同的操作。要求使用Oracle Net Configuration Assistant工具來配置網(wǎng)絡(luò)組件,使用戶能夠訪問遠程數(shù)據(jù)庫。(5) 使用

4、SQL *Plus和iSQL *Plus連接Oracle服務(wù)器Oracle數(shù)據(jù)庫網(wǎng)絡(luò)配置成功之后,就可以使用Oracle工具連接和使用數(shù)據(jù)庫了。SQL *Plus是最常用的Oracle查詢工具,要求用前面練習(xí)創(chuàng)建的用戶登錄數(shù)據(jù)庫,以創(chuàng)建應(yīng)用系統(tǒng)的表。2. 實驗要求根據(jù)實驗內(nèi)容指定的要去完成實訓(xùn),并提交實訓(xùn)結(jié)果。實驗2 SQL查詢和SQL函數(shù)(2學(xué)時)1、 目標(biāo)1 能夠構(gòu)造select語句2 能夠測試SQL操作符3 能夠使用SQL函數(shù)2、 實驗內(nèi)容及要求1.實驗內(nèi)容(1)測試ROWID和ROWNUM偽列用戶表因為沒有建立主鍵約束而插入了重復(fù)的記錄,為了解決數(shù)據(jù)冗余問題,必須刪除表中重復(fù)的記錄。用

5、戶應(yīng)用程序只關(guān)心查詢結(jié)果集中的一部分,需要限制查詢返回的行數(shù)。1) 啟動SQL *PLUS。創(chuàng)建表myt_est:CREATE TABLE my_test ( id NUMBER(3), name VARCHAR2(20) );2) 向表中插入5條完全相同的命令。INSERT INTO my_test VALUES (1, 'This is line 1');INSERT INTO my_test VALUES (1, 'This is line 1');INSERT INTO my_test VALUES (1, 'This is line 1'

6、;);INSERT INTO my_test VALUES (1, 'This is line 1');INSERT INTO my_test VALUES (1, 'This is line 1');COMMIT;查看表中記錄: SELECT * FROM my_test;3) 測試ROWID偽列。要求查看偽列、id、name,并利用偽列刪除第三行記錄,再執(zhí)行查詢語句:SELECT ROWNUM, id, name FROM my_test; 查看第三行記錄是否被刪除。4) 測試ROWNUM偽列。使用ROWNUM限制查詢ROWNUM<3的行數(shù)。(2) 構(gòu)

7、造select語句創(chuàng)建表employee:CREATE TABLE employee ( empno VARCHAR2(5) PRIMARY KEY, ename VARCHAR2(25), designation VARCHAR2(20), dateofjoining DATE, branchcode VARCHAR2(15) REFERENCES Branch_Details (branchcode),deptcode VARCHAR2(15) REFERENCES Dept_Details (deptcode) );INSERT INTO employee VALUES ('E0

8、01', 'John Smith' , 'Manager', '1-2月-1998', 'BH01', 'DP02');插入多條記錄:INSERT INTO employee VALUES ('E002', 'Jane', 'Sales Manager','1-6月-2001', 'BH02', 'DP02');INSERT INTO employee VALUES ('E003', 'H

9、arry ', 'Accountant', '1-11月-2003', 'BH03', 'DP01');INSERT INTO employee VALUES ('E004', 'JOE', 'Accountant', '1-12月-2002', 'BH03', 'DP03');INSERT INTO employee VALUES ('E005', 'Michael', 'Manager

10、', '1-1月-1999', 'BH03', 'DP02');INSERT INTO employee VALUES ('E006', 'Jack Aranck', 'Sales Manager', '1-2月-2003', 'BH05', 'DP01');INSERT INTO employee VALUES ('E007', 'George', 'Sr. Accountant', '

11、1-11月-2004', 'BH05', 'DP03');INSERT INTO employee VALUES ('E008', 'John Aranck' , 'Sr. Accountant', '1-2月-2005', 'BH01', 'DP02');職員表employee中的信息需要做較大的調(diào)整,在調(diào)整之前要先對表中的總要記錄做一個副本。查詢職員信息時需要指定各個列的別名,如以中文名稱做標(biāo)題等。(3) 測試SQL操作符檢查表 Salary_Record

12、s的描述:CREATE TABLE Salary_Records (empno VARCHAR2(5) REFERENCES Employee(empno), working_Days NUMBER,empsal NUMBER );公司的財務(wù)部需要檢查員工的工資,請使用SQL操作符編寫語句,檢索工資在15000到20000元之間的職員的信息。(4) 使用連接操作符創(chuàng)建表order_master:CREATE TABLE ORDER_MASTER ( ORDERNO VARCHAR2(5) PRIMARY KEY, ODATE DATE, VENCODE VARCHAR2(5), OSTATUS

13、 CHAR(1), DEL_DATE DATE );INSERT INTO ORDER_MASTER VALUES ('O001', '12-8月-08', 'V001','y','22-8月-08');INSERT INTO ORDER_MASTER VALUES ('O002', '5-7月-08', 'V008','n','6-7月-08');INSERT INTO ORDER_MASTER VALUES ('O003&#

14、39;, '12-9月-08', 'V012','n','22-9月-08');COMMIT;銷售經(jīng)理想查看vencode為V008的供應(yīng)商的訂單狀態(tài),要求使用連接操作符編寫查詢語句,使ORDERNO、ODATE、DEL_DATE在同一列顯示,而非分列顯示。(5) 使用集合操作符要求編寫語句以顯示vendor_master和order_master表中不重復(fù)的vencode列值,只列出ostatus為“c”的vencode。(6) 使用SQL日期函數(shù)公司決定提升2003年前半年之前就職的職員。要求顯示職員的就職年度,如果日期晚于“

15、01-7月-2003”,則四舍五入到下一年。編寫語句以顯示2003年7月1日之前就職職員的詳細信息。2. 實驗要求根據(jù)實驗內(nèi)容指定的要去完成實訓(xùn),并提交實訓(xùn)結(jié)果。實驗3 鎖和表分區(qū)(2學(xué)時)一、目標(biāo)1 能夠理解鎖定的概念2 能夠測試行級鎖3 能夠測試共享鎖和行共享鎖4 能夠創(chuàng)建表分區(qū)二、實驗內(nèi)容及要求1.實驗內(nèi)容(1)測試行級鎖先創(chuàng)建表空間GITM,再創(chuàng)建用戶:ACCP,密碼:ACCP,用ACCP登陸SQL *PLUS、CREATE TABLE employee ( empno VARCHAR2(5) PRIMARY KEY, ename VARCHAR2(25), designation V

16、ARCHAR2(20), dateofjoining DATE, branchcode VARCHAR2(15),deptcode VARCHAR2(15) );INSERT INTO employee VALUES ('E001', 'John Smith' , 'Manager', '1-2月-1998', 'BH01', 'DP02');INSERT INTO employee VALUES ('E002', 'Jane', 'Sales Manager

17、','1-6月-2001', 'BH02', 'DP02');INSERT INTO employee VALUES ('E003', 'Harry ', 'Accountant', '1-11月-2003', 'BH03', 'DP01');INSERT INTO employee VALUES ('E004', 'JOE', 'Accountant', '1-12月-2002'

18、, 'BH03', 'DP03');INSERT INTO employee VALUES ('E005', 'Michael', 'Manager', '1-1月-1999', 'BH03', 'DP02');INSERT INTO employee VALUES ('E006', 'Jack Aranck', 'Sales Manager', '1-2月-2003', 'BH05',

19、'DP01');INSERT INTO employee VALUES ('E007', 'George', 'Sr. Accountant', '1-11月-2004', 'BH05', 'DP03');INSERT INTO employee VALUES ('E008', 'John Aranck' , 'Sr. Accountant', '1-2月-2005', 'BH01', 'DP02

20、');授予SCOTT用戶更新EMPLOYEE表的權(quán)限。grant all on employee to scott;ACCP用戶執(zhí)行下列命令:select * from employee where empno=E006 for update;update employee set designation=Accountant where empno=E006;打開SQL PLUS的另一個實例,以SCOTT身份登陸并更新employee表的E006行。update ACCP.employee SET designation=Accountant where empno=E006;這時候

21、更新不成功,因為該行被ACCP用戶鎖定。需等ACCP用戶釋放該鎖。切換到ACCP用戶,執(zhí)行COMMIT命令。再切回SCOTT用戶,執(zhí)行更新操作。(2) 測試共享鎖案例:GITM公司人力資源部的職員每個周末都要對employee表進行統(tǒng)計以形成周報表。因為統(tǒng)計報表需要較長的時間,為了保證表的一致性,不希望在統(tǒng)計的時間段里有記錄的更新。使用什么方法能達到此效果?分析:采用共享鎖。共享鎖鎖定表,僅允許其他用戶查詢表中的行,但不允許插入、更新或刪除行。多個用戶可以同時在同一表中放置共享鎖,即允許資源共享,因此得名“共享鎖”。在此案例中,通過共享鎖,人力資源部的職員讀取表employee進行統(tǒng)計,那么其

22、他用戶無法更新該表。在統(tǒng)計完成之后釋放鎖定,其他用戶就可以進行更新了。1) 啟動SQL *PLUS,以ACCP身份登錄,執(zhí)行以下命令來鎖定employee表。SQL> lock table employee in share mode;2) 打開SQL *PLUS的另一個實例,以SCOTT用戶身份登錄,執(zhí)行下列語句。SQL>delete from accp.employee where empno='E005'此時,SQL *PLUS停止響應(yīng)刪除操作等待釋放鎖。3) 切換到第一個SQL *PLUS實例并提交事務(wù)。SQL>COMMIT;4) 此時,SCOTT用戶

23、的刪除操作得到響應(yīng),并成功返回。執(zhí)行以下命令取消刪除。SQL>ROLLBACK;5) 以SCOTT用戶身份鎖定employee表。SQL>LOCK TABLE accp.employee IN SHARE MODE;6) 再以ACCP用戶身份鎖定employee表。SQL>LOCK TABLE employee IN SHARE MODE;此時,表employee被兩個用戶同時鎖定,所有用戶都不能在此表上執(zhí)行更新操作。當(dāng)所有用戶執(zhí)行COMMIT命令或ROLLBACK命令結(jié)束事務(wù)時,所才會被釋放。(3) 測試行共享鎖案例:GITM公司的多個部門都需要訪問和更新employee表

24、,這些用戶都有權(quán)限更新表的行,但是有的用戶使用了獨占鎖定表,使其他用戶無法更新此表。如何避免這種情況?分析:可以通過使用行共享鎖來限制其他用戶獨占訪問表。以行共享方式鎖定表時,允許多個用戶同時更新同一表中的不同行。1) 在ACCP模式中執(zhí)行下列命令,以行共享模式來鎖定employee表。SQL>LOCK TABLE employee IN ROW SHARE MODE;2) 通過輸入下列命令來更新employee表。SQL>UPDATE employee SET ename='pam' WHERE empno='E001'3) 打開SQL *PLUS

25、的另一個實例SCOTT,然后更新employee表中的記錄。SQL>UPDATE employee SET ename='Sam' WHERE empno='E003'4) 執(zhí)行以下語句,嘗試獨占鎖定employee表。SQL>LOCL TABLE ACCP.employee IN EXCLUSIVE MODE NOWAIT;(4) 創(chuàng)建范圍分區(qū)創(chuàng)建employee_details表,包含employee_id, ename, dateofjoining, deptname, branchname和branchcode等列,根據(jù)職員的就職日期對emp

26、loyee表進行分區(qū)。create table employee_details(emp_id varchar2(5),ename varchar2(25),job varchar2(20),dateofjoining date )partition by range(dateofjoining)(partiton doj1 values less than(to_date('01/04/2001','DD/MM/YYYY'),partiton doj2 values less than(to_date('01/07/2003','DD/

27、MM/YYYY'),partiton doj3 values less than(to_date('01/09/2004','DD/MM/YYYY'),partiton doj4 values less than(to_date('01/10/2005','DD/MM/YYYY') );1) 執(zhí)行下列語句向分區(qū)表中插入測試記錄。SQL>INSERT INTO employee_details SELECT empno,ename,designation,dateofjoining FROM employee;2) 執(zhí)

28、行下列語句查詢分區(qū)doj4中的記錄。SQL>SELECT * FROM employee_details partition(doj4);(5) 創(chuàng)建散列分區(qū)問題:GITM公司的銷售部需要根據(jù)產(chǎn)品編號分析每個月的銷售記錄。要求在monthly_sales表中創(chuàng)建散列分區(qū)快速完成次工作。create table monthly_sales(product_id varchar2(5) not null,sales_date date not null,sales_cost number )partiton by hash(product_id)(partiton pid1,partiton

29、 pid2,partiton pid3 );2. 實驗要求根據(jù)實驗內(nèi)容指定的要去完成實訓(xùn),并提交實訓(xùn)結(jié)果。實驗4 數(shù)據(jù)庫對象(2學(xué)時)一、目標(biāo)1 能夠創(chuàng)建和使用同義詞2 能夠創(chuàng)建和使用序列3 能夠創(chuàng)建和使用視圖4 能夠創(chuàng)建各種類型的索引二、實驗內(nèi)容及要求1.實驗內(nèi)容(1)創(chuàng)建同義詞問題:為表“ticket_header”創(chuàng)建一個名為“tick”的同義詞。1) 創(chuàng)建表空間GITM,創(chuàng)建用戶ACCP,密碼ACCP。以ACCP用戶身份登陸SQL *PLUS。2) 在SQL提示符下執(zhí)行語句:create table ticket_header( fleet_id number(5), ticket_n

30、o varchar2(6), origin varchar2(6), destination varchar2(6), adults number(1) );3) 執(zhí)行語句:create synonym tick for ticket_header;提示:create synonym為創(chuàng)建同義詞的關(guān)鍵詞。(2)創(chuàng)建公有同義詞問題:要求所有用戶都能夠訪問ticket_header表而不必知道該表屬于哪個用戶,請實現(xiàn)。分析:oracle支持兩種類型的同義詞:私有同義詞、公有同義詞。私有同義詞只能由創(chuàng)建它的用戶所使用;公有同義詞可以由數(shù)據(jù)庫中所有的用戶使用。練習(xí)1中創(chuàng)建的是私有同義詞。要創(chuàng)建公有同義

31、詞必須擁有相應(yīng)的權(quán)限。1) 在用戶ACCP下執(zhí)行語句:create public synonym pub_tick for ticket_header;提示:create public synonym為創(chuàng)建公有同義詞的關(guān)鍵詞。執(zhí)行上面語句,oracle將顯示“權(quán)限不足”的提示消息。2) 再以system用戶身份登陸到oracle數(shù)據(jù)庫。執(zhí)行語句:create public synonym pub_tick for accp.ticket_header;3) 以ACCP用戶登陸,執(zhí)行語句:select * from pub_tick;(3)刪除同義詞問題:將練習(xí)2中創(chuàng)建的同義詞tick刪除1)

32、以用戶ACCP登陸,執(zhí)行語句:drop public synonym pub_tick;Oracle將提示“權(quán)限不足”。提示:這是因為刪除公有同義詞必須擁有“drop public synonym”權(quán)限。而ACCP用戶不具有該權(quán)限。2) 在ACCP用戶下,執(zhí)行語句:drop synonym tick;(4)創(chuàng)建序列問題:請創(chuàng)建一個名為“new_seq”的序列。要求:初始值為25,每次增加2,達到75時,又從25重新開始。提示:初始值25 start with 25 每次增加2 increment by 2 達到75,也就是說最大值為75 maxvalue 75那么最小值就是25 minvalu

33、e 25達到75后,又從25重新開始,也就是說該序列可以循環(huán)計數(shù) cycle 執(zhí)行下面語句: create sequence new_seqincrement by 2start with 25maxvalue 75minvalue 25cyclenocache ;(5)訪問序列提示:Oracle提供了兩個偽列,可以用來訪問偽列的值 currval和nextvalcurrval返回的是序列的當(dāng)前值;nextval返回的是下一個序列值在練習(xí)4完成的基礎(chǔ)上,執(zhí)行語句:1) select new_seq.nextvalue from dual; 2) select new_seq.currvalue

34、 from dual; (6)更改序列1) 在SQL提示符下執(zhí)行下列語句:ALTER SEQUENCE new_seq INCREMENT BY 5;2) 執(zhí)行下列語句查看所作的修改:SELECT new_seq.NEXTVAL FROM dual;(7)刪除序列DROP SEQUENCE new_seq;(8)創(chuàng)建視圖問題:用戶經(jīng)常只需要顯示“fleet_header”表的day列和route_id列,請給出解決方案。1) 先創(chuàng)建基表CREATE TABLE  fleet_header ( day date, name varchar2(20), route_id number(5

35、) );2) 創(chuàng)建視圖CREATE VIEW fleet( day, route_id) AS SELECT day, route_id FROM fleet_header;3) 訪問視圖SELECT * FROM fleet;(9)修改視圖定義將練習(xí)8中所創(chuàng)建的視圖,修改為顯示“fleet_header”表中所有的列。CREATE OR REPLACE VIEW fleet AS SELECT * FROM fleet_header;(10)創(chuàng)建帶有錯誤的視圖在并不存在的表“product”上創(chuàng)建錯誤視圖:CREATE FORCE VIEW myview AS SELECT * FROM p

36、roduce;(11)刪除視圖DROP VIEW myview;(12)創(chuàng)建索引問題:如何在ticket_header表(練習(xí)1中已經(jīng)創(chuàng)建了該表,不需重復(fù)創(chuàng)建)的adults列上創(chuàng)建名為”a_index”的索引。CREATE INDEX a_index ON ticket_header(adults);(13)創(chuàng)建唯一索引在表place_header的place_name列上創(chuàng)建名為“place_ind”的唯一索引。CREATE TABLE place_header ( place_id number primary key, place_name varchar2(20), bus_stat

37、ion varchar2(20) );CREATE UNIQUE INDEX place_ind ON place_header(place_name);2. 實驗要求根據(jù)實驗內(nèi)容指定的要去完成實訓(xùn),并提交實訓(xùn)結(jié)果。實驗5 使用PL/SQL(2學(xué)時)一、目標(biāo)1 理解邏輯比較的意義2 能使用各種控制結(jié)構(gòu)3 能編寫錯誤處理程序二、實驗內(nèi)容及要求1.實驗內(nèi)容(1)使用條件控制問題:由于工程取得巨大成功,GITM公司決定向員工發(fā)放獎金。獎金根據(jù)職員所在部門的代碼來計算。如果部門代碼為“DP01”,獎金為2000元;部門代碼為“DP02”,獎金為1700元;部門代碼為“DP03”,獎金為1500元,請設(shè)

38、計解決方案。reate table salary_records(empcode varchar2(10),empname varchar2(30),deptcode varchar2(20),empsal number );insert into salary_records values('E001','Jacica','DP01',1000);insert into salary_records values('E002','Smith','DP02',1500);insert into sa

39、lary_records values('E003','Marke','DP03',2000);SET SERVEROUTPUT ONDECLARE DPTCODE VARCHAR2(15);EMP_CODE VARCHAR2(10);SALARY NUMBER;BEGINSELECT DEPTCODE, EMPCODE, EMPSAL INTO DPTCODE, EMP_CODE, SALARY FROM SALARY_RECORDS WHERE EMPCODE='&EMPID'FOR UPDATE OF EMPSAL;

40、IF DPTCODE='DP01' THENUPDATE SALARY_RECORDS SET EMPSAL = SALARY + 2000 WHERE EMPCODE= EMP_CODE ;ELSIF DPTCODE = 'DP02' THENUPDATE SALARY_RECORDS SET EMPSAL = SALARY + 1700 WHERE EMPCODE = EMP_CODE;ELSIF DPTCODE = 'DP03' THENUPDATE SALARY_RECORDS SET EMPSAL = SALARY + 1500 WHE

41、RE EMPCODE= EMP_CODE;END IF;COMMIT;END;(2) 使用循環(huán)控制請編寫一個程序,用以接受用戶輸入的學(xué)生編號和課程。在course_details表中插入詳細信息。在course_details表中插入由用戶分5次輸入的詳細信息。每次在表中插入記錄時,學(xué)生編號都應(yīng)增加1。DECLAREcourserec course_details%ROWTYPE;counter NUMBER:=0;BEGINcourserec.sid:=&student_id;courserec.course:='&Course_name'WHILE coun

42、ter < 5LOOPINSERT INTO course_details values(courserec.sid,courserec.course);counter:=counter+1;courserec.sid:=courserec.sid+1;END LOOP;END;/(3) 使用預(yù)定義異常公司通過employee表維護員工記錄,此表包含職員的信息,如職員編號、職員姓名和職員職稱等。要求編寫一段PL/SQL代碼,用以接受職員編號并檢索職員姓名。將職員姓名存儲在變量empname中。如果代碼引發(fā)VALUE_ERROR異常,則向用戶顯示錯誤消息。(4) 引發(fā)應(yīng)用程序錯誤要求編寫一

43、個程序,用以接受用戶輸入的職員編號、工資和部門代碼。如果部門代碼為“DP01”且工資高于10000元,則更新職員的工資。如果工資低于10000元,則顯示消息“工資低于10000元”。2. 實驗要求根據(jù)實驗內(nèi)容指定的要去完成實訓(xùn),并提交實訓(xùn)結(jié)果。實驗6 游標(biāo)管理(2學(xué)時)1、 目標(biāo)能夠使用游標(biāo)二、實驗內(nèi)容及要求(1)隱式游標(biāo)的工作原理問題:公司的經(jīng)理想根據(jù)職員編號查看其所在部門的名稱,部門名稱存儲在dept_details表中。請編寫一段代碼以接受職員編號并顯示相應(yīng)的部門名稱。假設(shè)職員表格employee如下所示,有8條記錄:create table employee( empno varcha

44、r2(5), ename varchar2(25), designation varchar2(20), dateofjoining date, branchcode varchar2(15),deptcode varchar2(15) );insert into employee values ('e001', 'john smith' , 'manager', '1-2月-1998', 'bh01', 'dp02');insert into employee values ('e002&

45、#39;, 'jane', 'sales manager','1-6月-2001', 'bh02', 'dp02');insert into employee values ('e003', 'harry ', 'accountant', '1-11月-2003', 'bh03', 'dp01');insert into employee values ('e004', 'joe', &#

46、39;accountant', '1-12月-2002', 'bh03', 'dp03');insert into employee values ('e005', 'michael', 'manager', '1-1月-1999', 'bh03', 'dp02');insert into employee values ('e006', 'jack aranck', 'sales manager'

47、;, '1-2月-2003', 'bh05', 'dp01');insert into employee values ('e007', 'george', 'sr. accountant', '1-11月-2004', 'bh05', 'dp03');insert into employee values ('e008', 'john aranck' , 'sr. accountant', '1

48、-2月-2005', 'bh01', 'dp02');表格dept_details,有3條記錄如下所示:create table dept_details (deptcode varchar2(15), deptname char(15) ) ;insert into dept_details values ('dp01','marketing'); insert into dept_details values ('dp02','sales');insert into dept_detai

49、ls values ('dp03','accountants');SET SERVEROUTPUT ONDECLARE deptnm VARCHAR2(25);dept_code VARCHAR2(10);BEGINSELECT deptcode INTO dept_code FROM employee WHERE empno='&Employee_Number'SELECT deptname INTO deptnm FROM dept_details WHERE deptcode = dept_code;DBMS_OUTPUT.PUT_

50、LINE('部門名稱: ');DBMS_OUTPUT.PUT_LINE('-');DBMS_OUTPUT.PUT_LINE(deptnm);EXCEPTIONWHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE('職員不存在');END;(2)顯式游標(biāo)的工作原理問題:公司的助理銷售經(jīng)理想將總凈價大于2000元項目的項目編號和總價值單獨存儲在totalworth表中。要求編寫一段代碼可以顯示總凈價大于2000元的項目編號和總價值。要求利用表格itemfile完成要求。表格itemfile如下所示:create ta

51、ble itemfile ( itemcode varchar2(4), itemdesc varchar2(20), p_category varchar2(20), qty_hand number(5), re_level number(5), max_level number(5), itemrate number(7,2) );insert into itemfile values('i201','nuts','spares',100,50,250,20);insert into itemfile values('i202'

52、;,'bolts','spares',95,125,300,16.5);insert into itemfile values('i204','holders','spares',18,30,75,112);insert into itemfile values('i205','covers','accessories',30,15,50,400);insert into itemfile values('i203','panels',

53、'accessories',75,30,150,4000);insert into itemfile values('i206','brackets','spares',150,73,200,132);commit;create table totalworth(ITEMCODE VARCHAR2(5),TOTAL_WORTH NUMBER);DECLAREitemrec itemfile%ROWTYPE;CURSOR itemcursor IS SELECT * FROM itemfile;BEGINOPEN itemcurso

54、r;FETCH itemcursor INTO itemrec;WHILE itemcursor%FOUND LOOPFETCH itemcursor INTO itemrec;IF itemrec.ITEMRATE * itemrec.QTY_HAND > 2000 THENINSERT INTO totalworth VALUES (itemrec.itemcode,itemrec.ITEMRATE * itemrec.QTY_HAND);END IF;END LOOP;CLOSE itemcursor;END;(3)循環(huán)游標(biāo)工作原理問題:公司的總經(jīng)理想要查詢各個部門的所有職員的姓名

55、。要求編寫一段代碼以顯示部門名稱和此部門的所有職員姓名。用循環(huán)游標(biāo)實現(xiàn)。表格dept_details各個部門的信息:create table dept_details (deptcode varchar2(15) , deptname char(15) ) ;insert into dept_details values ('dp01','marketing'); insert into dept_details values ('dp02','sales');insert into dept_details values (&#

56、39;dp03','accountants');表格employee存儲職員的詳細信息:create table employee( empno varchar2(5), ename varchar2(25), designation varchar2(20), dateofjoining date, branchcode varchar2(15) ,deptcode varchar2(15) );insert into employee values ('e001', 'john smith' , 'manager',

57、'1-2月-1998', 'bh01', 'dp02');insert into employee values ('e002', 'jane', 'sales manager','1-6月-2001', 'bh02', 'dp02');insert into employee values ('e003', 'harry ', 'accountant', '1-11月-2003', &#

58、39;bh03', 'dp01');insert into employee values ('e004', 'joe', 'accountant', '1-12月-2002', 'bh03', 'dp03');insert into employee values ('e005', 'michael', 'manager', '1-1月-1999', 'bh03', 'dp02'

59、);insert into employee values ('e006', 'jack aranck', 'sales manager', '1-2月-2003', 'bh05', 'dp01');insert into employee values ('e007', 'george', 'sr. accountant', '1-11月-2004', 'bh05', 'dp03');insert in

60、to employee values ('e008', 'john aranck' , 'sr. accountant', '1-2月-2005', 'bh01', 'dp02');SET SERVEROUTPUT ONBEGINFOR dept_details IN (SELECT deptcode, deptnameFROM dept_details)LOOPDBMS_OUTPUT.PUT_LINE('部門');DBMS_OUTPUT.PUT_LINE('-');

61、DBMS_OUTPUT.PUT_LINE(dept_details.DEPTNAME);FOR employee in (SELECT empno, enameFROM employeeWHERE DEPTCODE = DEPT_DETAILS.DEPTCODE)LOOPDBMS_OUTPUT.PUT_LINE('職員: '|employee.ENAME);END LOOP;END LOOP;END;(4)REF游標(biāo)的工作原理問題:公司的經(jīng)理想輸入部門代碼以檢索職員姓名。要求編寫一段代碼,通過在表中輸入部門代碼來檢索該部門的職員。(利用表格employee完成以上要求)。SET

62、 SERVEROUTPUT ONDECLARETYPE cursor_type IS REF CURSOR;cursor_ex cursor_type;empTable employee%ROWTYPE;optionval VARCHAR2(10); BEGIN optionval:='&Department_Code' OPEN cursor_ex FOR SELECT * FROM employee WHERE deptcode=optionval; LOOPFETCH cursor_ex INTO empTable;EXIT WHEN cursor_ex%NOTFOUND;DBMS_OUTPUT.PUT_LINE(' ');DBMS_OUTPUT.PUT_LINE('職員姓名:'|empTabl

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論