版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、本科實驗報告課程名稱: 大型數(shù)據(jù)庫系統(tǒng) 實驗項目: 創(chuàng)建數(shù)據(jù)庫和表 實驗地點: 多學科樓4506 專業(yè)班級:軟件工程0901 學號:200 學生姓名: 指導教師: 2012年 4 月 17 日一、 實驗目的和要求1. 了解數(shù)據(jù)庫的結構以及一些基本概念。2. 了解表的結構特點。3. 了解Oracle 11g的基本數(shù)據(jù)類型。4. 學會使用DBCA創(chuàng)建數(shù)據(jù)庫。5. 學會使用界面方式創(chuàng)建表。6. 學會使用SQL語句手工創(chuàng)建數(shù)據(jù)庫。7. 學會使用SQL語句創(chuàng)建表。二、 實驗內容和原理1. 能夠創(chuàng)建數(shù)據(jù)庫的用戶必須是系統(tǒng)管理員,或是被授權使用CREATE DATABASE語句的用戶。2. 創(chuàng)建數(shù)據(jù)庫必須要
2、確定數(shù)據(jù)庫名、所有者(即創(chuàng)建數(shù)據(jù)庫的用戶)、數(shù)據(jù)庫大小、SGA分配和存儲數(shù)據(jù)庫的文件。3. 確定數(shù)據(jù)庫包含哪些表以及所包含的各表的結構,還要了解Oracle 11g的常用數(shù)據(jù)類型,以創(chuàng)建數(shù)據(jù)庫的表。4. 創(chuàng)建企業(yè)管理的員工管理數(shù)據(jù)庫YGGL,包含Employees(員工自然信息 )表、Departments(部門信息)表和Salary(員工薪水情況)表。各表的結構如下所示。表T1.1 Employees表結構列名數(shù)據(jù)類型長度是否允許為空值說明EmployeeIDChar6員工編號,主鍵NameChar10姓名BirthdayDate出生日期SexNumber1性別AddressChar20地址
3、ZipChar6郵編PhoneNumberChar12電話號碼DepartmentChar3員工部門號、外鍵表T1.2 Departments表結構列名數(shù)據(jù)類型長度是否允許為空值說明DepartmentIDChar3部門編號、主鍵DepartmentNameChar20部門號NoteVarchar2100備注表T1.3 Salary表結構列名數(shù)據(jù)類型長度是否允許為空值說明EmplyeeIDChar6員工編號、主鍵InComeNumber8,2收入OutComeNumber8,2支出三、 主要儀器設備Windows XP/7、oracle 10g/11g四、 操作方法與實驗步驟1. 利用DBCA
4、創(chuàng)建數(shù)據(jù)庫1) 數(shù)據(jù)庫名稱為YGGL,它的全局數(shù)據(jù)庫名稱為YGGL。2) 控制文件三個,存放路徑為,名稱分別為CONTROL01.CR、CONTROL02.CR和CONTROL03.CR。3) 重做日志文件三個,大小為100MB,存放路徑為:,名稱分別為redo01.log、redo02.log和redo03.log。4) 創(chuàng)建臨時表空間temp01.dpf。5) 數(shù)字字符集為ZHS16GBK,國家字符集為AL16UTF16。6) 數(shù)據(jù)塊大小為4KB。進入DBCA,根據(jù)其提示逐步完成數(shù)據(jù)庫的創(chuàng)建工作。實際情況,我以創(chuàng)建表空間代替。2. 利用DBCA刪除數(shù)據(jù)庫(實際不操作)3. 在OEM和利用s
5、ql語句分別創(chuàng)建表下面列出建表語句:/* 創(chuàng)建Departments表*/create table Departments( department_id char(3), department_name varchar2(20) not null, note varchar2(100), constraint departments_pk primary key(department_id)tablespace yggl;/* 創(chuàng)建Salary表*/create table Salary( employee_id char(6), income number(8, 2) not null, o
6、utcome number(8, 2) not null, constraint Salary_pk primary key(employee_id), constraint employee_id_foreign_key foreign key(employee_id) references employees(employee_id)tablespace yggl;五、 實驗結果與分析創(chuàng)建表空間:以下為創(chuàng)建表,因為自己的命名習慣,對其中部分名稱進行了修正,另外,一些數(shù)據(jù)的數(shù)據(jù)類型該用更合適的數(shù)據(jù)類型。創(chuàng)建employees表:利用sql語句建表也全部成功。六、 討論、心得(可選)本次試驗考
7、察內容基本為數(shù)據(jù)定義語言,有數(shù)據(jù)庫的創(chuàng)建(因為以前已建過了,所以這次我用名稱空間代替),表的創(chuàng)建(圖形化操作與sql語句操作)。差不多就這樣子,通過這次試驗大概可以掌握oracle數(shù)據(jù)庫的基本操作,主要有助于對其環(huán)境的熟悉。本科實驗報告課程名稱: 大型數(shù)據(jù)庫系統(tǒng) 實驗項目: 表數(shù)據(jù)插入、修改和刪除 實驗地點: 多學科樓4506 專業(yè)班級:軟件工程0901 學號:20090學生姓名: 指導教師: 2012年 4 月 19 日一、 實驗目的和要求1. 學會使用PL/SQL語句對數(shù)據(jù)庫表進行插入、修改和刪除數(shù)據(jù)操作。2. 學會使用SQL Developer對數(shù)據(jù)庫表進行插入、修改和刪除數(shù)據(jù)的操作。3
8、. 了解數(shù)據(jù)更新操作時要注意數(shù)據(jù)完整性。4. 了解PL/SQL語句對表數(shù)據(jù)操作的靈活控制功能。二、 實驗內容和原理1. 了解對表數(shù)據(jù)的插入、刪除、修改都屬于表數(shù)據(jù)的更新操作。對表數(shù)據(jù)的操作可以在SQL Developer中進行,也可以由PL/SQL語句實現(xiàn)。2. 掌握PL/SQL語句中用于對表數(shù)據(jù)進行插入、修改和刪除的命令分別是INSERT、UPDATE和DELETE(或TRANCATE TABLE)。3. 在執(zhí)行插入、刪除、修改等數(shù)據(jù)更新操作時,必須保證數(shù)據(jù)的完整性。4. 使用PL/SQL語句在對表數(shù)據(jù)進行插入、修改及刪除時,比在OEM中操作表數(shù)據(jù)更為靈活,功能更強大。在實驗1中,用于實驗的
9、YGGL數(shù)據(jù)庫中的三個表已經(jīng)建立,現(xiàn)在要將各表的樣本數(shù)據(jù)添加到表中。樣本數(shù)據(jù)如表T2.1、表T2.2和表T2.3所示。表T2.1 Employees表數(shù)據(jù)樣本編號姓名出生日期性別住址郵編電話號碼部門號王林1966-01-231中山路32-1-5082伍容華1976-03-281北京東路100-21表T2.2 Departments表數(shù)據(jù)樣本部門號部門名稱備注部門號部門名稱備注1財務部NULL4研發(fā)部NULL2人力資源部NULL5市場部NULL3經(jīng)理辦公室NULL表T2.3 Salary表數(shù)據(jù)樣本編號收入支出編號收入支出2100.8123.093259.98281.521582.6288.032
10、860.0198.02568.88185.652347.68180.0三、 主要儀器設備WINDOWS XP/WINDOWS 7Oracle 10g/11g四、 操作方法與實驗步驟分別使用SQL Developer和PL/SQL語句,在實驗1建立的數(shù)據(jù)庫YGGL的表Employees、表Departments和表Salary中插入多行數(shù)據(jù)記錄,然后修改和刪除一些記錄。使用PL/SQL命令進行有限制的修改和刪除。(一) 使用SQL Developer操作數(shù)據(jù)啟動SQL Developer,展開yggl_ora連接,單擊”Employees”表,在左邊窗口中選擇”Data”選項卡。在此窗口中,單擊
11、”Insert row”按鈕,表中將增加一個新行,在新行中雙擊一列空白處后輸入新數(shù)據(jù),輸完后單擊”Commit Changes”按鈕,將數(shù)據(jù)保存到數(shù)據(jù)庫中。修改數(shù)據(jù)的方法和添加數(shù)據(jù)類似,如果要刪除一行數(shù)據(jù),選中該行數(shù)據(jù),單擊”Delete Selected Row(s)”按鈕,之后該行的行號前會顯示一個“”號,刪除后單擊”Commit Changes”按鈕保存。(二) 使用PL/SQL命令操作數(shù)據(jù)1. 使用PL/SQL語句分別向YGGL數(shù)據(jù)庫的表Employees、表Departments和表Salary中插入插入一行記錄。在啟動SQL*Plus窗口或SQL Developer的代碼編輯窗口中
12、,輸入以下PL/SQL語句并執(zhí)行:一下為對3個表的數(shù)據(jù)的所有插入語句:/* 向DEPARTMENTS表中插入數(shù)據(jù)樣本*/insert into DEPARTMENTS values(001, 財務部, null);insert into DEPARTMENTS values(002, 人力資源部, null);INSERT INTO Departments VALUES(003,經(jīng)理辦公室,NULL);INSERT INTO Departments VALUES(004,研發(fā)部,NULL);INSERT INTO Departments VALUES(005,市場部,NULL);commit;
13、/* 向employee表中插入數(shù)據(jù)樣本*/insert into employees values(, 王林, to_date(1966-01-23, YYYY-MM-DD), 1, 中山路 32-1-508, , , 002);INSERT INTO Employees VALUES(,伍容華,TO_DATE(,YYYYMMDD),1, 北京東路100-2,001);insert into employees values(, 王向榮, to_date(1982-12-19, YYYY-MM-DD), 1, 四牌樓 10-0-108, , , 001);INSERT INTO Employ
14、ees VALUES(,李麗,TO_DATE(,YYYYMMDD),0, 中山東路102-2, 001);INSERT INTO Employees VALUES(,劉明,TO_DATE(,YYYYMMDD),1, 虎距路100-2,005);INSERT INTO Employees VALUES(,朱俊,TO_DATE(,YYYYMMDD),1, 牌樓巷5-3-106,005);INSERT INTo Employees VALUES(,鐘敏,TO_DATE(,YYYYMMDD),0, 中山路10-3-105,003);INSERT INTO Employees VALUES(,張石兵,T
15、O_DATE(,YYYYMMDD),1, 解放路34-1-203,005);INSERT INTO Employees VALUES(,林濤,TO_DATE(,YYYYMMDD),1, 中山北路24-35,003);INSERT INTo Employees VaLUES(,李玉珉,TO_DATE(,YYYYMMDD),1, 熱和路209-3,004);INSERT INTO Employees VALUES(,葉凡,TO_DATE(,YYYYMMDD),1, 北京西路3-7-52,004);INSERT INTO Employees VALUES(,陳琳琳,TO_DATE(,YYYYMMDD
16、),0, 漢中路120-4-12,004);commit;/* 向Salary表中插入數(shù)據(jù)樣本*/insert into Salary values(, 2100.8, 123.09);INSERT INTO Salary VALUES(,1582.62,88.03);INSERT INTO Salary VALUES(,2569.88,185.65);INSERT INTO Salary VALUES(,1987.01,79.58);INSERT INTO Salary VALUES(,2066.15,108.0);INSERT INTO Salary VALUES(,2980.7,210.
17、2);INSERT INTO Salary VALUES(,3259.98,281.52);INSERT INTO Salary VALUES(,2860.0,198.0);INSERT INTO Salary VALUES(,2347.68,180.0);INSERT INTO Salary VALUES(,2531.98,199.08);INSERT INTO Salary VALUES(,2240.0,121.0);INSERT INTO Salary VALUES(,1980.0,100.0);commit;2. 使用PL/SQL命令修改表Salary中的某個記錄的字段值。語句:/*u
18、pdate SALARY表*/UPDATE SALARY SET INCOME = 2890 WHERE EMPLOYEE_ID = ;COMMIT;按回車鍵,執(zhí)行上述語句,將編號為的職工收入改為2890.在OEM中打開YGGL數(shù)據(jù)庫的Salary表,觀察數(shù)據(jù)變化。3. 使用PL/SQL語句修改表Salary中的所有記錄的字段值。在SQL*Plus界面中輸入以下PL/SQL語句:語句/* 將其所有行的IMCOME加100*/UPDATE SALARY SET INCOME = INCOME + 100;COMMIT;按回車鍵,執(zhí)行上述語句,將所有職工的收入增加100??梢?,使用PL/SQL語句
19、操作表數(shù)據(jù)比在SQL Developer中操作表數(shù)據(jù)更為靈活。輸入以下PL/SQL語句,觀察數(shù)據(jù)變化。SELECT* FROM Salary;4. 使用DELETE語句刪除Salary表中一行記錄。/* 刪除salary表中的一行記錄*/DELETE FROM SALARY WHERE employee_id = ;COMMIT;5. 使用TRANCATE TABLE語句刪除表中所有行。在SQL*Plus界面中輸入以下PL/SQL語句:/*清空表*/delete from Salary;delete from employees;delete from departments;TRUNCATE
20、 TABLE SALARY;五、 實驗結果與分析按上述過程操作,試驗結果均滿足預期要求。六、 討論、心得(可選)本次試驗主要考察對表的數(shù)據(jù)的基本更新操作,即dml語言。通過對表的增刪改操作熟悉對應的sql語句以及OEM操作。 本科實驗報告課程名稱: 大型數(shù)據(jù)庫系統(tǒng) 實驗項目: 數(shù)據(jù)庫的查詢和視圖 實驗地點: 多學科樓506 專業(yè)班級:軟件工程0901 學號: 學生姓名: 指導教師: 2012年 4月21日1、 實驗目的和要求1、掌握SELECT語句的基本語法2、掌握子查詢的表示方法3、掌握連接查詢的表示方法4、掌握數(shù)據(jù)匯總的方法5、掌握SELECT語句的GROUP BY子句的作用和使用方法6、
21、掌握SELECT語句的ORDER BY子句的作用和使用方法7、掌握視圖的使用方法二、實驗內容1. 了解SELECT語句的基本語法格式和執(zhí)行方法2. 了解子查詢的表示方法、連接查詢和數(shù)據(jù)匯總的方法3. 了解SELECT語句的GROUP BY子句的作用和使用方法4. 了解SELECT語句的ORDER BY子句的作用5. 了解視圖的作用和創(chuàng)建方法6. 了解視圖的使用方法三、實驗環(huán)境與設備 Win7、Oracle 11g四、操作方法與實驗步驟1、SELECT語句的基本使用(1)對于實驗2給出的數(shù)據(jù)庫表結構,查詢每個雇員的所有數(shù)據(jù) 在SQL*Plus窗口或SQL Developer中輸入語句并執(zhí)行 SE
22、LECT * FROM Employees;SELECT * FROM Departments;SELECT * FROM Salary;(2)查詢每個雇員的地址和電話 /* 查詢每個雇員的地址和電話*/SELECT ADDRESS, PHONE_NUMBER FROM EMPLOYEES; (3)查詢EmployeeID為的雇員的地址和電話 SELECT Address,PhoneNumber FROM Employees WHERE Employee_ID=; (4)查詢Employees表中所有女雇員的地址和電話,使用AS子句將結果中各列的標題分別指定為地址和電話 SELECT Addr
23、ess AS 地址,PhoneNumber AS 電話 FROM Employees WHERE sex=0;/* 查詢每個女性雇員的地址和電話,并對列名重新命名*/SELECT ADDRESS as 地址, PHONE_NUMBER 電話 FROM EMPLOYEES WHERE SEX = 0; (5)計算ID號以10開頭的雇員的實際收入 /* 計算ID號以10開頭的雇員的實際收入*/SELECT employee_id, INCOME - OUTCOME AS 實際收入 FROM SALARY WHERE EMPLOYEE_ID LIKE 10%; 2、 子查詢的使用(1) 查找在財務部
24、工作的雇員的情況SELECT * FROM EMPLOYEESWHERE Department_ID=(SELECT Department_IDFROM DepartmentsWHERE DepartmentName=財務部);(2) 查詢財務部年齡不低于所有研發(fā)部雇員年齡的雇員的姓名/* 查找財務部年齡不低于所有研發(fā)部雇員年齡的雇員的姓名*/SELECT * FROM EMPLOYEES WHERE department_id IN ( SELECT DEPARTMENT_ID FROM departments WHERE department_name = 財務部 ) AND birthd
25、ay = ALL ( SELECT INCOME FROM SALARY WHERE EMPLOYEE_ID IN ( SELECT EMPLOYEE_ID FROM EMPLOYEES WHERE DEPARTMENT_ID = ( SELECT DEPARTMENT_ID FROM DEPARTMENTS WHERE DEPARTMENT_NAME = 財務部 ) ) ) )3、連接查詢的使用 (1)查詢每個雇員的情況以及其薪水的情況 SELECT Employees.*,Salary.* FROM Employees,Salary WHERE Employees.Employee_ID=
26、Salary.Employee_ID; (2)查找財務部收入在2200元以上的雇員的姓名及其薪水詳情 /* 查找財務部收入在2200元以上的雇員姓名及其薪水詳情*/SELECT name, INCOME, OUTCOME FROM EMPLOYEES, SALARY, DEPARTMENTS WHERE employees.employee_id = salary.employee_id AND employees.department_id = departments.department_id AND departments.department_NAME = 財務部 AND INCOME
27、 2200;數(shù)據(jù)匯總(1) 求財務部雇員的平均收入/* 查找財務部雇員的平均收入*/SELECT AVG(INCOME) FROM SALARY, EMPLOYEES, DEPARTMENTS WHERE salary.employee_id = employees.employee_id AND employees.department_id = departments.department_id AND departments.department_name = 財務部;(2) 求財務部雇員的平均實際收入SELECT AVG(InCome-OutCome) AS 財務部平均實際收入 FRO
28、M Salary WHERE Employee_ID IN (SELECT Employee_ID FROM Employees WHERE Department_ID= (SELECT Department_ID FROM Departments WHERE Department_Name=財務部);(3) 求財務部雇員的總人數(shù)SELECT COUNT(Employee_ID) FROM Employees WHERE Department_ID= (SELECT Department_ID FROM Departments WHERE Department_Name=財務部);5、GROU
29、P BY和ORDER BY子句的使用 (1)求各部門的雇員數(shù) /* 求各部門的雇員數(shù)*/ SELECT DEPARTMENT_NAME, COUNT(*) FROM EMPLOYEES, departments WHERE employees.department_id = departments.department_id GROUP BY DEPARTMENTS.department_NAME; (2)將各部門的情況按收入由低到高排列/* 將各雇員的情況按收入由低到高排序*/SELECT EMPLOYEES.*, SALARY.INCOME, salary.outcome FROM EMP
30、LOYEES, SALARY WHERE employees.employee_id = salary.employee_id ORDER BY INCOME;6、 使用視圖 (1)創(chuàng)建視圖 a、限制查看雇員的實際情況 CREATE OR REPLACE VIEW cx_employeesAS SELECT EmployeeID,Name,Birthday,Sex,DepartmentID FROM Employees; b、限制各部門經(jīng)理只能查找本部門雇員的薪水情況,如限制財務經(jīng)理 想查看自己部門雇員姓名及其薪水詳情/* 創(chuàng)建財務部視圖*/CREATE OR REPLACE VIEW CX_
31、SALARYAS SELECT NAME, INCOME, OUTCOME FROM EMPLOYEES, SALARY, DEPARTMENTS WHERE employees.employee_id = salary.employee_id AND employees.department_id = departments.department_id AND department_name = 財務部; (2)使用視圖 /* 查詢財務部雇員薪水情況*/SELECT * FROM CX_SALARY;五、實驗結果與分析查詢employees表的全部數(shù)據(jù)查詢每個雇員的地址和電話查詢每個女性雇員
32、的地址和電話,并對列名重新命名計算ID號以10開頭的雇員的實際收入查找財務部年齡不低于所有研發(fā)部雇員年齡的雇員的姓名查找比所有財務部的雇員收入都要高的雇員的姓名查找財務部收入在2200元以上的雇員姓名及其薪水詳情查找財務部雇員的平均收入求各部門的雇員數(shù)將各雇員的情況按收入由低到高排序 查詢財務部雇員薪水情況六、討論、心得本實驗考察對表的查詢操作,算是sql語句中最常用的操作,這也是我們每個學生應該必須掌握的基本操作,此后是關于視圖的部分,它是一個很有效的功能,能夠有效限制各用戶只對自己有權操作的數(shù)據(jù)進行操作。本科實驗報告課程名稱: 大型數(shù)據(jù)庫系統(tǒng) 實驗項目: 索引和完整性 實驗地點: 多學科樓
33、506 專業(yè)班級:軟件工程0901 學號:2009學生姓名: 指導教師: 2012年 4月21日一、實驗目的和要求 目的: (1)掌握索引的使用方法 (2)掌握數(shù)據(jù)完整性的概念及分類 (3)掌握各種數(shù)據(jù)完整性的實現(xiàn)方法 要求: (1)了解索引的作用與分類 (2)掌握索引的創(chuàng)建 (3)理解數(shù)據(jù)完整性的概念及分類 (4)了解各種數(shù)據(jù)完整性的實現(xiàn)方法二、實驗內容和原理1、建立索引 對YGGL數(shù)據(jù)庫中Employees表的DepartmentID列建立索引 /* 在Employees表的Departm_ID 列建立索引*/ create index EMP_DEID ON EMPLOYEES(DEPA
34、RTMENT_ID) TABLESPACE USERS PCTFREE 48 INITRANS 10 MAXTRANS 100 STORAGE (INITIAL 64K NEXT 64K MINEXTENTS 5 MAXEXTENTS 20 PCTINCREASE 10 FREELISTS 1 FREELIST GROUPS 1)PARALLEL (DEGREE DEFAULT); 2、 實現(xiàn)域完整性/* 在Employees表的phone_number 列上建立check約束*/ALTER TABLE EMPLOYEES ADD( CONSTRAINT CH_PHONE CHECK(PHON
35、E_NUMBER BETWEEN 0 AND 9);3、 實現(xiàn)實體完整性(參見實驗1)4、 實現(xiàn)參照完整性(參見實驗1)三、主要儀器設備Win7、Oracle 11g四、實驗結果與分析(必填) 在Employees表的Departm_ID 列建立索引 在Employees表的phone_number 列上建立check約束五、討論、心得本次實驗首先是對索引的建立,它是一種可以提升用戶查詢效率的機制,在這一部分,我有注意到建立索引時是需要指定模式名的,似乎不同的用戶查詢同一張表格可能會用到不同的索引,不知道這樣理解正不正確。然后就是關于完整性的部分,由于在實驗一建立表的時候,我就已經(jīng)安照要求建立
36、好了完整性約束,所以這里沒有再重復做。本科實驗報告課程名稱: 大型數(shù)據(jù)庫系統(tǒng) 實驗項目: PL/SQL編程 實驗地點: 多學科樓506 專業(yè)班級:軟件工程1 學號:2002 學生姓名: 指導教師: 2012年 4月21日一、 實驗目的與要求(1) 進一步鞏固第2章第4章所學內容(2) 掌握變量的分類與使用(3) 掌握各種運算符的使用(4) 掌握各種控制語句的使用(5) 掌握系統(tǒng)函數(shù)及用戶自定義函數(shù)的使用二、 實驗內容和原理(1) 了解PL/SQL支持的各種基本數(shù)據(jù)類型(2) 了解PL/SQL各種運算符、控制語句的功能及使用方法(3) 了解系統(tǒng)函數(shù)的調用方法(4) 了解用戶自定義函數(shù)時用的一般步
37、驟三、 主要儀器設備Windows XP/7、oracle 10g/11g四、 操作方法與實驗步驟1 條件結構的使用在SQL*Plus的編輯窗口中分別輸入【例6.5】、【例6.6】、【例6.7】和例【6.8】程序并執(zhí)行。觀察結果。 2 循環(huán)結構的使用在SQL*Plus的編輯窗口中分別輸入【例6.9】、【例6.10】、【例6.11】和例【6.12】程序并執(zhí)行。觀察結果。3 選擇和跳轉語句在SQL*Plus的編輯窗口中分別輸入【例6.13】和【例6.14】程序并執(zhí)行。觀察結果。 4 自定義函數(shù)的使用(1) 定義一個函數(shù)實現(xiàn)如下功能。對于給定的DepartmentID值,查詢該值在Departmen
38、ts表中是否存在,若存在返回0,否則返回-1。語句: /* 給定一個Department_id值,查詢其在Departments表中是否存在,若存在返回0,否則返回-1.*/CREATE OR REPLACE FUNCTION CHECK_ID (P_DEPARTMENT_ID IN CHAR)RETURN NUMBERAS NUM NUMBER;BEGIN SELECT COUNT(*) INTO NUM FROM DEPARTMENTS WHERE DEPARTMENT_ID = P_DEPARTMENT_ID; IF NUM 0 THEN NUM := 0; ELSE NUM := -1
39、; END IF; RETURN (NUM);END; (2) 寫一段PL/SQL腳本程序調用上述函數(shù)。當向Employees表中插入一條記錄時,首先調用CHECK_ID檢索該記錄的DepartmentID值在表Departments的DepartmentID字段中是否存在對應值,若存在,則將該記錄插入Employees表。語句: /* 對上述函數(shù)進行測試*/set serveroutput onDECLARE NUM NUMBER;BEGIN NUM := check_id(002); IF NUM = 0 THEN dbms_output.put_line(存在!); INSERT INT
40、O EMPLOYEES VALUES( , 張文, TO_DATE(, yyyymmdd), 0, 南京鎮(zhèn)江路2號, , , 002 ); END IF;END ;五、 實驗結果與分析給定一個Department_id值,查詢其在Departments表中是否存在,若存在返回0,否則返回-1.對上述函數(shù)進行測試六、 討論、心得本實驗,書上給的實例代碼是不能正確運行的,主要原因是PL/SQL在執(zhí)行時并不區(qū)分大寫小,所以必須給參數(shù)和變量命不同的名字。然后就是,在調試程序時,我用了dbms_output.put_line(存在!);這樣的打印語句,它需要打開輸入服務才能在sqldeveloper環(huán)境
41、下正確運行。set serveroutput on;本科實驗報告課程名稱: 大型數(shù)據(jù)庫系統(tǒng) 實驗項目:實驗6 存儲過程和觸發(fā)器的使用實驗地點: 學院樓 502 專業(yè)班級: 軟件0901 學號:20學生姓名: 指導教師: 2012年 4月21日一、 實驗目的和要求(1) 掌握存儲過程的使用方法(2) 掌握觸發(fā)器的使用方法二、 實驗內容和原理1. 創(chuàng)建觸發(fā)器對表Employees的DepartmentID列與表Departments 的DepartmentID列應滿足參照完整性,規(guī)則如下:1) 向表Employees添加一條記錄時,該記錄的DepartmentID在Departments表中應存在
42、:2) 修改Departments表DepartmentID字段時在Employees表中應對應修改。3) 刪除Departments表中一記錄時,該記錄對于于Employees表中的記錄也應刪除.利用觸發(fā)器實現(xiàn)上述約束。2. 創(chuàng)建存儲過程1) 添加職員記錄的存儲過程EmployeeAdd。2) 修改職員記錄的存儲過程EmployeeUpdate。3) 刪除職員記錄的存儲過程EmployeeDelete。3. 調用存儲過程三、 主要儀器設備Win7電腦一臺,oracle11g四、 操作方法與實驗步驟1. 創(chuàng)建觸發(fā)器對表Employees的DEPARTMENT_ID列與表Departments
43、的DEPARTMENT_ID列應滿足參照完整性,規(guī)則如下:1) 向表Employees添加一條記錄時,該記錄的DEPARTMENT_ID在Departments表中應存在:/* 向表Employees添加或修改一條記錄時,該記錄的DEPARTMENT_ID在Departments表中應存在*/CREATE OR REPLACE TRIGGER EMPLOYEES_INS AFTER INSERT OR UPDATE ON EMPLOYEES FOR EACH ROWDECLARE NUM NUMBER;BEGIN SELECT COUNT(*) INTO NUM FROM DEPARTMENT
44、S WHERE DEPARTMENT_ID = :NEW.DEPARTMENT_ID; IF NUM = 0 THEN RAISE_APPLICATION_ERROR(-20001, 職員所在的部門不存在); END IF; END ;2) 修改Departments表DEPARTMENT_ID字段時在Employees表中應對應修改。/* 修改Departments表DEPARTMENT_ID字段時在Employees表中應對應修改*/CREATE OR REPLACE TRIGGER DEPARTMENTS_UPDATE AFTER UPDATE ON DEPARTMENTS FOR EA
45、CH ROWBEGIN UPDATE EMPLOYEES SET DEPARTMENT_ID = :NEW.DEPARTMENT_ID WHERE DEPARTMENT_ID = :OLD.DEPARTMENT_ID;END;3) 刪除Departments表中一記錄時,該記錄對于于Employees表中的記錄也應刪除./* 刪除Departments表中一記錄時,該記錄對于于Employees表中的記錄也應刪除*/CREATE OR REPLACE TRIGGER DEPARTMENTS_DELETE AFTER DELETE ON DEPARTMENTS FOR EACH ROWBEGIN
46、 DELETE FROM EMPLOYEES WHERE DEPARTMENT_ID = :OLD.DEPARTMENT_ID;END;因為Employees表與Salary表存在外鍵約束,所以,對于此也建立一個觸發(fā)器以使得上面的觸發(fā)器有效。/* * 刪除Employees表中一記錄時,該記錄對于于Salary表中的記錄也應刪除*/CREATE OR REPLACE TRIGGER EMPLOYEES_SALARY AFTER DELETE ON EMPLOYEES FOR EACH ROWBEGIN DELETE FROM SALARY WHERE EMPLOYEE_ID = :OLD.EM
47、PLOYEE_ID;END;2. 存儲過程的創(chuàng)建及調用1) 添加職員記錄的存儲過程EmployeeAdd。/* 添加職員記錄的存儲過程EmployeeAdd*/CREATE OR REPLACE PROCEDURE EMPLOYEE_ADD ( P_EMPLOYEE_ID IN CHAR, P_NAME IN CHAR, P_BIRTHDAY IN DATE, P_SEX IN NUMBER, P_ADDRESS IN CHAR, P_ZIP IN CHAR, P_PHONE_NUMBER IN CHAR, P_DEPARTMENT_ID IN CHAR)ASBEGIN INSERT INTO EMPLOYEES VALUES ( P_EMPLOYEE_ID, P_NAME, P_BIRTHDAY, P_SEX, P_ADDRESS, P_ZIP, P_PHONE_NUMBER, P_DEPARTMENT_ID ); COMMIT;END;EXEC EMPLOYEE_ADD(, 劉朝, TO_DATE(, YYYYMMDD), 1,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高新技術產品銷售合同管理規(guī)定2篇
- 二零二五年度游艇購置及保養(yǎng)維修協(xié)議3篇
- 2025版智能節(jié)能鋁合金門窗研發(fā)與推廣合作協(xié)議4篇
- 2025年項目抵押貸款合同范本解讀與實操6篇
- 2025版醫(yī)療器械融資委托擔保合同樣本3篇
- 二零二五年度貨車貨運保險與物流行業(yè)信用評估合同
- 2025年度智能機器人銷售與技術支持協(xié)議3篇
- 2025版新型綠色建筑材料供應及施工合同4篇
- 2025版中英外教專業(yè)能力培訓與雇傭合同3篇
- 個體資金借入合同:固定期限還款合同版
- 圖像識別領域自適應技術-洞察分析
- 個體戶店鋪租賃合同
- 新概念英語第二冊考評試卷含答案(第49-56課)
- 【奧運會獎牌榜預測建模實證探析12000字(論文)】
- 保安部工作計劃
- 2023痛風診療規(guī)范(完整版)
- (完整word版)企業(yè)對賬函模板
- 土力學與地基基礎(課件)
- 主要負責人重大隱患帶隊檢查表
- 魯濱遜漂流記人物形象分析
- 危險廢物貯存?zhèn)}庫建設標準
評論
0/150
提交評論