太原理工大學-oracle-大型數(shù)據(jù)庫實驗報告_第1頁
太原理工大學-oracle-大型數(shù)據(jù)庫實驗報告_第2頁
太原理工大學-oracle-大型數(shù)據(jù)庫實驗報告_第3頁
太原理工大學-oracle-大型數(shù)據(jù)庫實驗報告_第4頁
太原理工大學-oracle-大型數(shù)據(jù)庫實驗報告_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

本科實驗報告課程名稱:大型數(shù)據(jù)庫系統(tǒng)實驗工程:創(chuàng)立數(shù)據(jù)庫和表實驗地點:多學科樓4506專業(yè)班級:軟件工程0901學號:200學生姓名:指導(dǎo)教師:2023年4月17日實驗?zāi)康暮鸵罅私鈹?shù)據(jù)庫的結(jié)構(gòu)以及一些根本概念。了解表的結(jié)構(gòu)特點。了解Oracle11g的根本數(shù)據(jù)類型。學會使用DBCA創(chuàng)立數(shù)據(jù)庫。學會使用界面方式創(chuàng)立表。學會使用SQL語句手工創(chuàng)立數(shù)據(jù)庫。學會使用SQL語句創(chuàng)立表。實驗內(nèi)容和原理能夠創(chuàng)立數(shù)據(jù)庫的用戶必須是系統(tǒng)管理員,或是被授權(quán)使用CREATEDATABASE語句的用戶。創(chuàng)立數(shù)據(jù)庫必須要確定數(shù)據(jù)庫名、所有者〔即創(chuàng)立數(shù)據(jù)庫的用戶〕、數(shù)據(jù)庫大小、SGA分配和存儲數(shù)據(jù)庫的文件。確定數(shù)據(jù)庫包含哪些表以及所包含的各表的結(jié)構(gòu),還要了解Oracle11g的常用數(shù)據(jù)類型,以創(chuàng)立數(shù)據(jù)庫的表。創(chuàng)立企業(yè)管理的員工管理數(shù)據(jù)庫YGGL,包含Employees〔員工自然信息〕表、Departments〔部門信息〕表和Salary〔員工薪水情況〕表。各表的結(jié)構(gòu)如下所示。表T1.1Employees表結(jié)構(gòu)列名數(shù)據(jù)類型長度是否允許為空值說明EmployeeIDChar6×員工編號,主鍵NameChar10×姓名BirthdayDate×出生日期SexNumber1×性別AddressChar20√地址ZipChar6√PhoneNumberChar12√號碼DepartmentChar3×員工部門號、外鍵表T1.2Departments表結(jié)構(gòu)列名數(shù)據(jù)類型長度是否允許為空值說明DepartmentIDChar3×部門編號、主鍵DepartmentNameChar20×部門號NoteVarchar2100√備注表T1.3Salary表結(jié)構(gòu)列名數(shù)據(jù)類型長度是否允許為空值說明EmplyeeIDChar6×員工編號、主鍵InComeNumber8,2×收入OutComeNumber8,2×支出主要儀器設(shè)備WindowsXP/7、oracle10g/11g操作方法與實驗步驟利用DBCA創(chuàng)立數(shù)據(jù)庫數(shù)據(jù)庫名稱為YGGL,它的全局數(shù)據(jù)庫名稱為YGGL??刂莆募齻€,存放路徑為……,名稱分別為CONTROL01.CR、CONTROL02.CR和CONTROL03.CR。重做日志文件三個,大小為100MB,存放路徑為:………………,名稱分別為redo01.log、redo02.log和redo03.log。創(chuàng)立臨時表空間temp01.dpf。數(shù)字字符集為ZHS16GBK,國家字符集為AL16UTF16。數(shù)據(jù)塊大小為4KB。進入DBCA,根據(jù)其提示逐步完成數(shù)據(jù)庫的創(chuàng)立工作。實際情況,我以創(chuàng)立表空間代替。利用DBCA刪除數(shù)據(jù)庫〔實際不操作〕在OEM和利用sql語句分別創(chuàng)立表下面列出建表語句:/**創(chuàng)立Departments表*/createtableDepartments(department_idchar(3),department_namevarchar2(20)notnull,notevarchar2(100),constraintdepartments_pkprimarykey(department_id))tablespaceyggl;/**創(chuàng)立Salary表*/createtableSalary(employee_idchar(6),incomenumber(8,2)notnull,outcomenumber(8,2)notnull,constraintSalary_pkprimarykey(employee_id),constraintemployee_id_foreign_keyforeignkey(employee_id)referencesemployees(employee_id))tablespaceyggl;實驗結(jié)果與分析創(chuàng)立表空間:以下為創(chuàng)立表,因為自己的命名習慣,對其中局部名稱進行了修正,另外,一些數(shù)據(jù)的數(shù)據(jù)類型該用更適宜的數(shù)據(jù)類型。創(chuàng)立employees表:利用sql語句建表也全部成功。討論、心得〔可選〕本次試驗考察內(nèi)容根本為數(shù)據(jù)定義語言,有數(shù)據(jù)庫的創(chuàng)立〔因為以前已建過了,所以這次我用名稱空間代替〕,表的創(chuàng)立〔圖形化操作與sql語句操作〕。差不多就這樣子,通過這次試驗大概可以掌握oracle數(shù)據(jù)庫的根本操作,主要有助于對其環(huán)境的熟悉。本科實驗報告課程名稱:大型數(shù)據(jù)庫系統(tǒng)實驗工程:表數(shù)據(jù)插入、修改和刪除實驗地點:多學科樓4506專業(yè)班級:軟件工程0901學號:20230學生姓名:指導(dǎo)教師:2012年4實驗?zāi)康暮鸵髮W會使用PL/SQL語句對數(shù)據(jù)庫表進行插入、修改和刪除數(shù)據(jù)操作。學會使用SQLDeveloper對數(shù)據(jù)庫表進行插入、修改和刪除數(shù)據(jù)的操作。了解數(shù)據(jù)更新操作時要注意數(shù)據(jù)完整性。了解PL/SQL語句對表數(shù)據(jù)操作的靈活控制功能。實驗內(nèi)容和原理了解對表數(shù)據(jù)的插入、刪除、修改都屬于表數(shù)據(jù)的更新操作。對表數(shù)據(jù)的操作可以在SQLDeveloper中進行,也可以由PL/SQL語句實現(xiàn)。掌握PL/SQL語句中用于對表數(shù)據(jù)進行插入、修改和刪除的命令分別是INSERT、UPDATE和DELETE〔或TRANCATETABLE〕。在執(zhí)行插入、刪除、修改等數(shù)據(jù)更新操作時,必須保證數(shù)據(jù)的完整性。使用PL/SQL語句在對表數(shù)據(jù)進行插入、修改及刪除時,比在OEM中操作表數(shù)據(jù)更為靈活,功能更強大。在實驗1中,用于實驗的YGGL數(shù)據(jù)庫中的三個表已經(jīng)建立,現(xiàn)在要將各表的樣本數(shù)據(jù)添加到表中。樣本數(shù)據(jù)如表T2.1、表T2.2和表T2.3所示。表T2.1Employees表數(shù)據(jù)樣本編號姓名出生日期性別住址號碼部門號000001王林1966-01-231中山路32-1-508210003833556682010008伍容華1976-03-281北京東路100-2210001833213211表T2.2Departments表數(shù)據(jù)樣本部門號部門名稱備注部門號部門名稱備注1財務(wù)部NULL4研發(fā)部NULL2人力資源部NULL5市場部NULL3經(jīng)理辦公室NULL表T2.3Salary表數(shù)據(jù)樣本編號收入支出編號收入支出0000012100.8123.091089913259.98281.520100081582.6288.030200102860.0198.01022012568.88185.650200182347.68180.0主要儀器設(shè)備WINDOWSXP/WINDOWS7Oracle10g/11g操作方法與實驗步驟分別使用SQLDeveloper和PL/SQL語句,在實驗1建立的數(shù)據(jù)庫YGGL的表Employees、表Departments和表Salary中插入多行數(shù)據(jù)記錄,然后修改和刪除一些記錄。使用PL/SQL命令進行有限制的修改和刪除。使用SQLDeveloper操作數(shù)據(jù)啟動SQLDeveloper,展開yggl_ora連接,單擊〞Employees〞表,在左邊窗口中選擇〞Data〞選項卡。在此窗口中,單擊〞Insertrow〞按鈕,表中將增加一個新行,在新行中雙擊一列空白處后輸入新數(shù)據(jù),輸完后單擊〞CommitChanges〞按鈕,將數(shù)據(jù)保存到數(shù)據(jù)庫中。修改數(shù)據(jù)的方法和添加數(shù)據(jù)類似,如果要刪除一行數(shù)據(jù),選中該行數(shù)據(jù),單擊〞DeleteSelectedRow(s)〞按鈕,之后該行的行號前會顯示一個“——〞號,刪除后單擊〞CommitChanges〞按鈕保存。使用PL/SQL命令操作數(shù)據(jù)使用PL/SQL語句分別向YGGL數(shù)據(jù)庫的表Employees、表Departments和表Salary中插入插入一行記錄。在啟動SQL*Plus窗口或SQLDeveloper的代碼編輯窗口中,輸入以下PL/SQL語句并執(zhí)行:一下為對3個表的數(shù)據(jù)的所有插入語句:/**向DEPARTMENTS表中插入數(shù)據(jù)樣本*/insertintoDEPARTMENTSvalues('001','財務(wù)部',null);insertintoDEPARTMENTSvalues('002','人力資源部',null);INSERTINTODepartmentsVALUES('003','經(jīng)理辦公室',NULL);INSERTINTODepartmentsVALUES('004','研發(fā)部',NULL);INSERTINTODepartmentsVALUES('005','市場部',NULL);commit;/**向employee表中插入數(shù)據(jù)樣本*/insertintoemployeesvalues('000001','王林',to_date('1966-01-23','YYYY-MM-DD'),1,'中山路32-1-508','210003','83355668','002');INSERTINTOEmployeesVALUES('010008','伍容華',TO_DATE('19760328','YYYYMMDD'),1,'北京東路100-2','210001','83321321','001');insertintoemployeesvalues('020010','王向榮',to_date('1982-12-19','YYYY-MM-DD'),1,'四牌樓10-0-108','210006','83792361','001');INSERTINTOEmployeesVALUES('020018','李麗',TO_DATE('19600723','YYYYMMDD'),0,'中山東路102-2','210002','83413301','001');INSERTINTOEmployeesVALUES('102201','劉明',TO_DATE('19721018','YYYYMMDD'),1,'虎距路100-2','210013','83606608','005');INSERTINTOEmployeesVALUES('102208','朱俊',TO_DATE('19650928','YYYYMMDD'),1,'牌樓巷5-3-106','210004','84708817','005');INSERTINToEmployeesVALUES('108991','鐘敏',TO_DATE('19790810','YYYYMMDD'),0,'中山路10-3-105','210003','83346722','003');INSERTINTOEmployeesVALUES('111006','張石兵',TO_DATE('19741001','YYYYMMDD'),1,'解放路34-1-203','210010','84563418','005');INSERTINTOEmployeesVALUES('210678','林濤',TO_DATE('19770402','YYYYMMDD'),1,'中山北路24-35','210008','83467336','003');INSERTINToEmployeesVaLUES('302566','李玉珉',TO_DATE('19680920','YYYYMMDD'),1,'熱和路209-3','210001','58765991','004');INSERTINTOEmployeesVALUES('308759','葉凡',TO_DATE('19781118','YYYYMMDD'),1,'北京西路3-7-52','210002','83308901','004');INSERTINTOEmployeesVALUES('504209','陳琳琳',TO_DATE('19690903','YYYYMMDD'),0,'漢中路120-4-12','210018','84468158','004');commit;/**向Salary表中插入數(shù)據(jù)樣本*/insertintoSalaryvalues('000001',2100.8,123.09);INSERTINTOSalaryVALUES('010008',1582.62,88.03);INSERTINTOSalaryVALUES('102201',2569.88,185.65);INSERTINTOSalaryVALUES('111006',1987.01,79.58);INSERTINTOSalaryVALUES('504209',2066.15,108.0);INSERTINTOSalaryVALUES('302566',2980.7,210.2);INSERTINTOSalaryVALUES('108991',3259.98,281.52);INSERTINTOSalaryVALUES('020010',2860.0,198.0);INSERTINTOSalaryVALUES('020018',2347.68,180.0);INSERTINTOSalaryVALUES('308759',2531.98,199.08);INSERTINTOSalaryVALUES('210678',2240.0,121.0);INSERTINTOSalaryVALUES('102208',1980.0,100.0);commit;使用PL/SQL命令修改表Salary中的某個記錄的字段值。語句:/**updateSALARY表**/UPDATESALARYSETINCOME=2890WHEREEMPLOYEE_ID='000001';COMMIT;按回車鍵,執(zhí)行上述語句,將編號為000001的職工收入改為2890.在OEM中翻開YGGL數(shù)據(jù)庫的Salary表,觀察數(shù)據(jù)變化。使用PL/SQL語句修改表Salary中的所有記錄的字段值。在SQL*Plus界面中輸入以下PL/SQL語句:語句/***將其所有行的IMCOME加100**/UPDATESALARYSETINCOME=INCOME+100;COMMIT;按回車鍵,執(zhí)行上述語句,將所有職工的收入增加100??梢?,使用PL/SQL語句操作表數(shù)據(jù)比在SQLDeveloper中操作表數(shù)據(jù)更為靈活。輸入以下PL/SQL語句,觀察數(shù)據(jù)變化。SELECT*FROMSalary;使用DELETE語句刪除Salary表中一行記錄。/***刪除salary表中的一行記錄**/DELETEFROMSALARYWHEREemployee_id='010008';COMMIT;使用TRANCATETABLE語句刪除表中所有行。在SQL*Plus界面中輸入以下PL/SQL語句:/***清空表**/deletefromSalary;deletefromemployees;deletefromdepartments;TRUNCATETABLESALARY;實驗結(jié)果與分析按上述過程操作,試驗結(jié)果均滿足預(yù)期要求。討論、心得〔可選〕本次試驗主要考察對表的數(shù)據(jù)的根本更新操作,即dml語言。通過對表的增刪改操作熟悉對應(yīng)的sql語句以及OEM操作。本科實驗報告課程名稱:大型數(shù)據(jù)庫系統(tǒng)實驗工程:數(shù)據(jù)庫的查詢和視圖實驗地點:多學科樓506專業(yè)班級:軟件工程0901學號:202300學生姓名:指導(dǎo)教師:2023年4月21日實驗?zāi)康暮鸵?、掌握SELECT語句的根本語法2、掌握子查詢的表示方法3、掌握連接查詢的表示方法4、掌握數(shù)據(jù)匯總的方法5、掌握SELECT語句的GROUPBY子句的作用和使用方法6、掌握SELECT語句的ORDERBY子句的作用和使用方法7、掌握視圖的使用方法二、實驗內(nèi)容1.了解SELECT語句的根本語法格式和執(zhí)行方法2.了解子查詢的表示方法、連接查詢和數(shù)據(jù)匯總的方法3.了解SELECT語句的GROUPBY子句的作用和使用方法4.了解SELECT語句的ORDERBY子句的作用5.了解視圖的作用和創(chuàng)立方法6.了解視圖的使用方法三、實驗環(huán)境與設(shè)備Win7、Oracle11g四、操作方法與實驗步驟1、SELECT語句的根本使用〔1〕對于實驗2給出的數(shù)據(jù)庫表結(jié)構(gòu),查詢每個雇員的所有數(shù)據(jù)在SQL*Plus窗口或SQLDeveloper中輸入語句并執(zhí)行SELECT*FROMEmployees;SELECT*FROMDepartments;SELECT*FROMSalary;〔2〕查詢每個雇員的地址和/***查詢每個雇員的地址和**/SELECTADDRESS,PHONE_NUMBERFROMEMPLOYEES;〔3〕查詢EmployeeID為000001的雇員的地址和SELECTAddress,PhoneNumberFROMEmployeesWHEREEmployee_ID='000001';〔4〕查詢Employees表中所有女雇員的地址和,使用AS子句將結(jié)果中各列的標題分別指定為地址和SELECTAddressAS地址,PhoneNumberASFROMEmployeesWHEREsex=0;/***查詢每個女性雇員的地址和,并對列名重新命名**/SELECTADDRESSas地址,PHONE_NUMBERFROMEMPLOYEESWHERESEX='0';〔5〕計算ID號以10開頭的雇員的實際收入/***計算ID號以10開頭的雇員的實際收入**/SELECTemployee_id,INCOME-OUTCOMEAS實際收入FROMSALARYWHEREEMPLOYEE_IDLIKE'10%';子查詢的使用查找在財務(wù)部工作的雇員的情況SELECT*FROMEMPLOYEESWHEREDepartment_ID=(SELECTDepartment_IDFROMDepartmentsWHEREDepartmentName='財務(wù)部');查詢財務(wù)部年齡不低于所有研發(fā)部雇員年齡的雇員的姓名/***查找財務(wù)部年齡不低于所有研發(fā)部雇員年齡的雇員的姓名**/SELECT*FROMEMPLOYEESWHEREdepartment_idIN(SELECTDEPARTMENT_IDFROMdepartmentsWHEREdepartment_name='財務(wù)部')ANDbirthday<=ALL(SELECTBIRTHDAYFROMEMPLOYEESWHEREDEPARTMENT_IDIN(SELECTDEPARTMENT_IDFROMdepartmentsWHEREdepartment_name='研發(fā)部'));查找比所有財務(wù)部的雇員收入都搞得雇員的姓名/***查找比所有財務(wù)部的雇員收入都要高的雇員的姓名**/SELECTNAMEFROMEMPLOYEESWHEREEMPLOYEE_idIN(SELECTEMPLOYEE_IDFROMSALARYWHEREINCOME>=ALL(SELECTINCOMEFROMSALARYWHEREEMPLOYEE_IDIN(SELECTEMPLOYEE_IDFROMEMPLOYEESWHEREDEPARTMENT_ID=(SELECTDEPARTMENT_IDFROMDEPARTMENTSWHEREDEPARTMENT_NAME='財務(wù)部'))))3、連接查詢的使用〔1〕查詢每個雇員的情況以及其薪水的情況SELECTEmployees.*,Salary.*FROMEmployees,SalaryWHEREEmployees.Employee_ID=Salary.Employee_ID;〔2〕查找財務(wù)部收入在2200元以上的雇員的姓名及其薪水詳情/***查找財務(wù)部收入在2200元以上的雇員姓名及其薪水詳情**/SELECTname,INCOME,OUTCOMEFROMEMPLOYEES,SALARY,DEPARTMENTSWHEREemployees.employee_id=salary.employee_idANDemployees.department_id=departments.department_idANDdepartments.department_NAME='財務(wù)部'ANDINCOME>2200;數(shù)據(jù)匯總求財務(wù)部雇員的平均收入/***查找財務(wù)部雇員的平均收入**/SELECTAVG(INCOME)FROMSALARY,EMPLOYEES,DEPARTMENTSWHEREsalary.employee_id=employees.employee_idANDemployees.department_id=departments.department_idANDdepartments.department_name='財務(wù)部';求財務(wù)部雇員的平均實際收入SELECTAVG(InCome-OutCome)AS財務(wù)部平均實際收入FROMSalaryWHEREEmployee_IDIN(SELECTEmployee_IDFROMEmployeesWHEREDepartment_ID=(SELECTDepartment_IDFROMDepartmentsWHEREDepartment_Name='財務(wù)部'));求財務(wù)部雇員的總?cè)藬?shù)SELECTCOUNT(Employee_ID)FROMEmployeesWHEREDepartment_ID=(SELECTDepartment_IDFROMDepartmentsWHEREDepartment_Name='財務(wù)部');5、GROUPBY和ORDERBY子句的使用〔1〕求各部門的雇員數(shù)/***求各部門的雇員數(shù)**/SELECTDEPARTMENT_NAME,COUNT(*)FROMEMPLOYEES,departmentsWHEREemployees.department_id=departments.department_idGROUPBYDEPARTMENTS.department_NAME;〔2〕將各部門的情況按收入由低到高排列/***將各雇員的情況按收入由低到高排序**/SELECTEMPLOYEES.*,SALARY.INCOME,salary.outcomeFROMEMPLOYEES,SALARYWHEREemployees.employee_id=salary.employee_idORDERBYINCOME;使用視圖〔1〕創(chuàng)立視圖a、限制查看雇員的實際情況CREATEORREPLACEVIEWcx_employeesASSELECTEmployeeID,Name,Birthday,Sex,DepartmentIDFROMEmployees;b、限制各部門經(jīng)理只能查找本部門雇員的薪水情況,如限制財務(wù)經(jīng)理想查看自己部門雇員姓名及其薪水詳情/***創(chuàng)立財務(wù)部視圖**/CREATEORREPLACEVIEWCX_SALARYASSELECTNAME,INCOME,OUTCOMEFROMEMPLOYEES,SALARY,DEPARTMENTSWHEREemployees.employee_id=salary.employee_idANDemployees.department_id=departments.department_idANDdepartment_name='財務(wù)部';〔2〕使用視圖/***查詢財務(wù)部雇員薪水情況**/SELECT*FROMCX_SALARY;五、實驗結(jié)果與分析查詢employees表的全部數(shù)據(jù)查詢每個雇員的地址和查詢每個女性雇員的地址和,并對列名重新命名計算ID號以10開頭的雇員的實際收入查找財務(wù)部年齡不低于所有研發(fā)部雇員年齡的雇員的姓名查找比所有財務(wù)部的雇員收入都要高的雇員的姓名查找財務(wù)部收入在2200元以上的雇員姓名及其薪水詳情查找財務(wù)部雇員的平均收入求各部門的雇員數(shù)將各雇員的情況按收入由低到高排序查詢財務(wù)部雇員薪水情況六、討論、心得本實驗考察對表的查詢操作,算是sql語句中最常用的操作,這也是我們每個學生應(yīng)該必須掌握的根本操作,此后是關(guān)于視圖的局部,它是一個很有效的功能,能夠有效限制各用戶只對自己有權(quán)操作的數(shù)據(jù)進行操作。本科實驗報告課程名稱:大型數(shù)據(jù)庫系統(tǒng)實驗工程:索引和完整性實驗地點:多學科樓506專業(yè)班級:軟件工程0901學號:2023學生姓名:指導(dǎo)教師:2023年4月21日一、實驗?zāi)康暮鸵竽康模骸?〕掌握索引的使用方法〔2〕掌握數(shù)據(jù)完整性的概念及分類〔3〕掌握各種數(shù)據(jù)完整性的實現(xiàn)方法要求:〔1〕了解索引的作用與分類〔2〕掌握索引的創(chuàng)立〔3〕理解數(shù)據(jù)完整性的概念及分類〔4〕了解各種數(shù)據(jù)完整性的實現(xiàn)方法二、實驗內(nèi)容和原理1、建立索引對YGGL數(shù)據(jù)庫中Employees表的DepartmentID列建立索引/***在Employees表的Departm_ID列建立索引**/createindexEMP_DEIDONEMPLOYEES(DEPARTMENT_ID)TABLESPACEUSERSPCTFREE48INITRANS10MAXTRANS100STORAGE(INITIAL64KNEXT64KMINEXTENTS5MAXEXTENTS20PCTINCREASE10FREELISTS1FREELISTGROUPS1)PARALLEL(DEGREEDEFAULT);實現(xiàn)域完整性/***在Employees表的phone_number列上建立check約束**/ALTERTABLEEMPLOYEESADD(CONSTRAINTCH_PHONECHECK(PHONE_NUMBERBETWEEN'0'AND'9'));實現(xiàn)實體完整性〔參見實驗1〕實現(xiàn)參照完整性〔參見實驗1〕三、主要儀器設(shè)備Win7、Oracle11g四、實驗結(jié)果與分析〔必填〕在Employees表的Departm_ID列建立索引在Employees表的phone_number列上建立check約束五、討論、心得本次實驗首先是對索引的建立,它是一種可以提升用戶查詢效率的機制,在這一局部,我有注意到建立索引時是需要指定模式名的,似乎不同的用戶查詢同一張表格可能會用到不同的索引,不知道這樣理解正不正確。然后就是關(guān)于完整性的局部,由于在實驗一建立表的時候,我就已經(jīng)安照要求建立好了完整性約束,所以這里沒有再重復(fù)做。本科實驗報告課程名稱:大型數(shù)據(jù)庫系統(tǒng)實驗工程:PL/SQL編程實驗地點:多學科樓506專業(yè)班級:軟件工程1學號:2002學生姓名:指導(dǎo)教師:2023年4月21日實驗?zāi)康呐c要求進一步穩(wěn)固第2章~第4章所學內(nèi)容掌握變量的分類與使用掌握各種運算符的使用掌握各種控制語句的使用掌握系統(tǒng)函數(shù)及用戶自定義函數(shù)的使用實驗內(nèi)容和原理了解PL/SQL支持的各種根本數(shù)據(jù)類型了解PL/SQL各種運算符、控制語句的功能及使用方法了解系統(tǒng)函數(shù)的調(diào)用方法了解用戶自定義函數(shù)時用的一般步驟主要儀器設(shè)備WindowsXP/7、oracle10g/11g操作方法與實驗步驟條件結(jié)構(gòu)的使用在SQL*Plus的編輯窗口中分別輸入【例6.5】、【例6.6】、【例6.7】和例【6.8】程序并執(zhí)行。觀察結(jié)果。循環(huán)結(jié)構(gòu)的使用在SQL*Plus的編輯窗口中分別輸入【例6.9】、【例6.10】、【例6.11】和例【6.12】程序并執(zhí)行。觀察結(jié)果。選擇和跳轉(zhuǎn)語句在SQL*Plus的編輯窗口中分別輸入【例6.13】和【例6.14】程序并執(zhí)行。觀察結(jié)果。自定義函數(shù)的使用定義一個函數(shù)實現(xiàn)如下功能。對于給定的DepartmentID值,查詢該值在Departments表中是否存在,假設(shè)存在返回0,否那么返回-1。語句:/***給定一個Department_id值,查詢其在Departments表中是否存在,假設(shè)存在返回0,否那么返回-1.**/CREATEORREPLACEFUNCTIONCHECK_ID(P_DEPARTMENT_IDINCHAR)RETURNNUMBERASNUMNUMBER;BEGINSELECTCOUNT(*)INTONUMFROMDEPARTMENTSWHEREDEPARTMENT_ID=P_DEPARTMENT_ID;IFNUM>0THENNUM:=0;ELSENUM:=-1;ENDIF;RETURN(NUM);END;寫一段PL/SQL腳本程序調(diào)用上述函數(shù)。當向Employees表中插入一條記錄時,首先調(diào)用CHECK_ID檢索該記錄的DepartmentID值在表Departments的DepartmentID字段中是否存在對應(yīng)值,假設(shè)存在,那么將該記錄插入Employees表。語句:/***對上述函數(shù)進行測試**/setserveroutputonDECLARENUMNUMBER;BEGINNUM:=check_id('002');IFNUM=0THENdbms_output.put_line('存在!');INSERTINTOEMPLOYEESVALUES('990210','張文',TO_DATE('19820324','yyyymmdd'),0,'南京鎮(zhèn)江路2號','210009','3497534','002');ENDIF;END;實驗結(jié)果與分析給定一個Department_id值,查詢其在Departments表中是否存在,假設(shè)存在返回0,否那么返回-1.對上述函數(shù)進行測試討論、心得本實驗,書上給的實例代碼是不能正確運行的,主要原因是PL/SQL在執(zhí)行時并不區(qū)分大寫小,所以必須給參數(shù)和變量命不同的名字。然后就是,在調(diào)試程序時,我用了dbms_output.put_line('存在!');這樣的打印語句,它需要翻開輸入效勞才能在sqldeveloper環(huán)境下正確運行。setserveroutputon;本科實驗報告課程名稱:大型數(shù)據(jù)庫系統(tǒng)實驗工程:實驗6存儲過程和觸發(fā)器的使用實驗地點:學院樓502專業(yè)班級:軟件0901學號:20學生姓名:指導(dǎo)教師:2023年4月21日實驗?zāi)康暮鸵笳莆沾鎯^程的使用方法掌握觸發(fā)器的使用方法實驗內(nèi)容和原理創(chuàng)立觸發(fā)器對表Employees的DepartmentID列與表Departments的DepartmentID列應(yīng)滿足參照完整性,規(guī)那么如下:向表Employees添加一條記錄時,該記錄的DepartmentID在Departments表中應(yīng)存在:修改Departments表DepartmentID字段時在Employees表中應(yīng)對應(yīng)修改。刪除Departments表中一記錄時,該記錄對于于Employees表中的記錄也應(yīng)刪除.利用觸發(fā)器實現(xiàn)上述約束。創(chuàng)立存儲過程添加職員記錄的存儲過程EmployeeAdd。修改職員記錄的存儲過程EmployeeUpdate。刪除職員記錄的存儲過程EmployeeDelete。調(diào)用存儲過程主要儀器設(shè)備Win7電腦一臺,oracle11g操作方法與實驗步驟創(chuàng)立觸發(fā)器對表Employees的 DEPARTMENT_ID列與表Departments的 DEPARTMENT_ID列應(yīng)滿足參照完整性,規(guī)那么如下:向表Employees添加一條記錄時,該記錄的 DEPARTMENT_ID在Departments表中應(yīng)存在:/***向表Employees添加或修改一條記錄時,該記錄的 DEPARTMENT_ID在Departments表中應(yīng)存在**/CREATEORREPLACETRIGGEREMPLOYEES_INSAFTERINSERTORUPDATEONEMPLOYEESFOREACHROWDECLARENUMNUMBER;BEGINSELECTCOUNT(*)INTONUMFROMDEPARTMENTSWHEREDEPARTMENT_ID=:NEW.DEPARTMENT_ID;IFNUM=0THENRAISE_APPLICATION_ERROR(-20001,'職員所在的部門不存在');ENDIF;END;修改Departments表 DEPARTMENT_ID字段時在Employees表中應(yīng)對應(yīng)修改。/***修改Departments表 DEPARTMENT_ID字段時在Employees表中應(yīng)對應(yīng)修改**/CREATEORREPLACETRIGGERDEPARTMENTS_UPDATEAFTERUPDATEONDEPARTMENTSFOREACHROWBEGINUPDATEEMPLOYEESSETDEPARTMENT_ID=:NEW.DEPARTMENT_IDWHEREDEPARTMENT_ID=:OLD.DEPARTMENT_ID;END;刪除Departments表中一記錄時,該記錄對于于Employees表中的記錄也應(yīng)刪除./***刪除Departments表中一記錄時,該記錄對于于Employees表中的記錄也應(yīng)刪除**/CREATEORREPLACETRIGGERDEPARTMENTS_DELETEAFTERDELETEONDEPARTMENTSFOREACHROWBEGINDELETEFROMEMPLOYEESWHEREDEPARTMENT_ID=:OLD.DEPARTMENT_ID;END;因為Employees表與Salary表存在外鍵約束,所以,對于此也建立一個觸發(fā)器以使得上面的觸發(fā)器有效。/***刪除Employees表中一記錄時,該記錄對于于Salary表中的記錄也應(yīng)刪除**/CREATEORREPLACETRIGGEREMPLOYEES_SALARYAFTERDELETEONEMPLOYEESFOREACHROWBEGINDELETEFROMSALARYWHEREEMPLOYEE_ID=:OLD.EMPLOYEE_ID;END;存儲過程的創(chuàng)立及調(diào)用添加職員記錄的存儲過程EmployeeAdd。/***添加職員記錄的存儲過程EmployeeAdd**/CREATEORREPLACEPROCEDUREEMPLOYEE_ADD(P_EMPLOYEE_IDINCHAR,P_NAMEINCHAR,P_BIRTHDAYINDATE,P_SEXINNUMBER,P_ADDRESSINCHAR,P_ZIPINCHAR,P_PHONE_NUMBERINCHAR,P_DEPARTMENT_IDINCHAR)ASBEGININSERTINTOEMPLOYEESVALUES(P_EMPLOYEE_ID,P_NAME,P_BIRTHDAY,P_SEX,P_ADDRESS,P_ZIP,P_PHONE_NUMBER,P_DEPARTMENT_ID);COMMIT;END;EXECEMPLOYEE_ADD('990230','劉朝',TO_DATE('19890909','YYYYMMDD'),1,'武漢小洪山5號','210003','83355668','003');〔這里注意,調(diào)用存儲過程時不能換行!〕修改職員記錄的存儲過程EmployeeUpdate。/***修改職員記錄的存儲過程EmployeeUpdate**/CREATEORREPLACEPROCEDUREEMPLOYEE_UPDATE(OLD_EMPLOYEE_IDINCHAR,P_NAMEINCHAR,P_BIRTHDAYINDATE,P_SEXINNUMBER,P_ADDRESSINCHAR,P_ZIPINCHAR,P_PHONE_NUMBERINCHAR,P_DEPARTMENT_IDINCHAR)ASBEGINUPDATEEMPLOYEESSETname=P_NAME,BIRTHDAY=P_BIRTHDAY,SEX=P_SEX,ADDRESS=P_ADDRESS,ZIP=P_ZIP,PHONE_NUMBER=P_PHONE_NUMBER,DEPARTMENT_ID=P_DEPARTMENT_IDWHEREEMPLOYEE_ID=OLD_EMPLOYEE_ID;COMMIT;END;EXECEMPLOYEE_UPDATE('990230','劉天',TO_DATE('19890909','YYYYMMDD'),1,'武漢小洪山5號','210003','83355668','003');刪除職員記錄的存儲過程EmployeeDelete。/***刪除職員記錄的存儲過程EmployeeDelete**/CREATEORREPLACEPROCEDUREEMPLOYEE_DELETE(IDINCHAR)ASBEGINDELETEFROMEMPLOYEESWHEREEMPLOYEE_ID=ID;COMMIT;END;EXECEMPLOYEE_DELETE('990230');實驗結(jié)果與分析驗證觸發(fā)器1:insertintoemployeesvalues('009001','王林2',to_d

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論