【正文】
.....9 實(shí)驗(yàn)五:觸發(fā)器和存儲過程................................................................................................11 選作題目................................................................................................................................13實(shí)驗(yàn)規(guī)則為了順利完成實(shí)驗(yàn)教學(xué)任務(wù),確保人身設(shè)備安全,培養(yǎng)嚴(yán)謹(jǐn)、踏實(shí)、實(shí)事求是的科學(xué)作風(fēng)和愛護(hù)國家財(cái)產(chǎn)的優(yōu)良品質(zhì),特制定以下實(shí)驗(yàn)規(guī)則:實(shí)驗(yàn)紀(jì)律(1)在實(shí)驗(yàn)室不得做和實(shí)驗(yàn)無關(guān)的事情。end if。否39。end。 where 圖書編號=p_圖書編號。update 圖書 set 是否借出=39。YYYY/MM/DD39。YYYY/MM/DD39。end。select into : from dual。是39。end。)。else(39。 where 圖書編號=p_tsbh。update 圖書 set 是否借出=39。YYYY/MM/DD39。YYYY/MM/DD39。否39。beginselect 是否借出 into v_sfjc from 圖書 where 圖書編號=p_tsbh。end。(2)create sequence seq_預(yù)約 start with 8 increment by 1 nomaxvalue nocycle nocache。create or replace trigger tr_借閱流水號 before insert on 借閱 for each rowbeginselect into : from dual。6)建立與還書存儲過程相對應(yīng)的觸發(fā)器,當(dāng)借閱表中填入還書日期時,該觸發(fā)器觸發(fā),自動修改所還圖書的是否借出為‘否’。(即該函數(shù)有2個輸入?yún)?shù))l 還書時,還書日期為系統(tǒng)時間。5)修改實(shí)驗(yàn)三還書功能的存儲過程。*該存儲過程主體部分只有insert into語句。該存儲過程要求: l 借書時輸入借書證號,圖書編號。數(shù)據(jù)庫原理及應(yīng)用實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱:觸發(fā)器 實(shí)驗(yàn)類型:驗(yàn)證型 實(shí)驗(yàn)環(huán)境:oracle 11g 指導(dǎo)教師:陳 駿 專業(yè)班級:信安1505班 姓名:李 維 學(xué)號:5120155364 聯(lián)系電話:*** 電子郵件: 實(shí)驗(yàn)地點(diǎn):東6E501 實(shí) 驗(yàn) 日 期: 2017年5月10日實(shí)驗(yàn)報(bào)告日期:2017年 5月 10日成績:__________________________一、實(shí)驗(yàn)?zāi)康模?)了解觸發(fā)器的概念、優(yōu)點(diǎn)(2)掌握觸發(fā)器的方法和步驟(3)掌握觸發(fā)器的使用四、實(shí)驗(yàn)平臺Oracle 11g五、實(shí)驗(yàn)步驟、出現(xiàn)的問題及解決方案(不能解決的將問題列出)(3)實(shí)驗(yàn)步驟1)通過序列和觸發(fā)器實(shí)現(xiàn)借閱表中借閱流水號字段的自動遞增。39。(39。 WHERE =VAL_圖書編號。UPDATE 圖書 SET 是否借出=39。BEGIN SELECT SYSDATE INTO VAL_TIME FROM DUAL。END。)。ELSE (39??蓤?zhí)行預(yù)約!39。))。IF Y_NUMBER=0 THEN INSERT INTO 預(yù)約(預(yù)約流水號,借書證號,ISBN,預(yù)約時間)VALUES(Y_預(yù)約流水號,Y_借書證號,Y_ISBN,TO_CHAR(SYSDATE(),39。BEGIN SELECT COUNT(*)INTO Y_NUMBER FROM 圖書 WHERE =Y_ISBN AND =39。END。 本次借書操作完成!39。 WHERE =VAL_圖書編號。UPDATE 圖書 SET 是否借出=39。YYYY/MM/DD39。l 圖書的是否借出改為‘否’。l 還書時要求輸入借書證號,圖書編號,罰款分類號(即該存儲過程有3個輸入?yún)?shù))。l 預(yù)約時間為系統(tǒng)時間。l 預(yù)約時要求輸入預(yù)約流水號,借書證號,ISBN。(即該存儲過程有3個輸入?yún)?shù))l 借書時,借書日期為系統(tǒng)時間。第一篇:數(shù)據(jù)庫原理實(shí)驗(yàn)三數(shù)據(jù)庫原理及應(yīng)用實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱:存儲過程 實(shí)驗(yàn)類型:驗(yàn)證型 實(shí)驗(yàn)環(huán)境:oracle 11g 指導(dǎo)教師:陳 駿 專業(yè)班級:信安1505班 姓名:學(xué)號:512015 聯(lián)系電話:電子郵件: 實(shí)驗(yàn)地點(diǎn):東6E501 實(shí) 驗(yàn) 日 期: 2017年5月10日 實(shí)驗(yàn)報(bào)告日期:2017年 5月 11日成績:__________________________一、實(shí)驗(yàn)?zāi)康模?)了解存儲過程的概念、優(yōu)點(diǎn)(2)熟練掌握創(chuàng)建存儲過程的創(chuàng)建方法(3)熟練掌握存儲過程的調(diào)用方法二、實(shí)驗(yàn)平臺Oracle 11g三、實(shí)驗(yàn)步驟、出現(xiàn)的問題及解決方案(不能解決的將問題列出)(1)實(shí)驗(yàn)步驟1)建立存儲過程完成圖書管理系統(tǒng)中的借書功能。功能要求:l 借書時要求輸入借閱流水號,借書證號,圖書編號。l 圖書的是否借出改為‘是’2)建立存儲過程完成圖書管理系統(tǒng)中的預(yù)約功能。(即該存儲過程有3個輸入?yún)?shù))l 存儲過程先檢查輸入的ISBN版本的圖書是否都已借出,如果是則進(jìn)行預(yù)約,否則提示“該書目有可借圖書,請查找”。3)建立存儲過程完成圖書管理系統(tǒng)中的還書功能。l 還書日期為系統(tǒng)時間。(2)問題及解決方案1)問題一:步驟一無法執(zhí)行原因:已創(chuàng)建的table中無“借書”項(xiàng)解決方案:將原代碼中的“借書”改為“借閱” 2)問題二:步驟二中出現(xiàn)無法識別的符號 原因:將英文分號誤寫為中文分號解決方案:修正為英文分號“;”四、思考與總結(jié)(1)書寫存儲語句時,應(yīng)注意涉及的表格和屬性名應(yīng)與創(chuàng)建表格時相同(2)注意區(qū)分中英文符號,避免出現(xiàn)符號無法識別以及程序沒有結(jié)尾等錯誤(3)注意空格的使用,避免出現(xiàn)缺少或多余的空格,造成語法錯誤五、附:實(shí)驗(yàn)完整源代碼CREATE OR REPLACE PROCEDURE PRO_借書功能(VAL_借閱流水號 IN %TYPE, VAL_借書證號 IN %TYPE, VAL_圖書編號 IN %TYPE)AS BEGIN INSERT INTO 借閱(借閱流水號,借書證號,圖書編號,借書日期)VALUES(VAL_借閱流水號,VAL_借書證號,VAL_圖書編號,TO_CHAR(SYSDATE(),39。))。是39。(39。)。CREATE OR REPLACE PROCEDURE PRO_預(yù)約功能(Y_預(yù)約流水號 IN %TYPE, Y_借書證號 IN %TYPE, Y_ISBN IN %TYPE)AS Y_NUMBER BINARY_INTEGER。否39。YYYY/MM/DD39。(39。)。該書可借,請查找!39。END IF。CREATE OR REPLACE PROCEDURE PRO_還書功能(VAL_借書證號 IN %TYPE, VAL_圖書編號 IN %TYPE, 4 VAL_罰款分類號 IN %TYPE)AS VAL_TIME DATE。UPDATE 借閱 SET 歸還日期=VAL_TIME WHERE 借書證號 =VAL_借書證號 AND =VAL_圖書編號。否39。UPDATE 借閱 SET 罰款分類號=VAL_罰款分類號 WHERE 借書證號 =VAL_借書證號 AND =VAL_圖書編號。 本次還書操作完成!END。)。2)通過序列和觸發(fā)器實(shí)現(xiàn)預(yù)約表中預(yù)約流水號字段的自動遞增3)修改實(shí)驗(yàn)三借書功能的存儲過程。(即該函數(shù)有2個輸入?yún)?shù))l 借書時,借書日期為系統(tǒng)時間。4)建立與借書存儲過程相對應(yīng)的觸發(fā)器,當(dāng)借閱表中加入借閱信息時,該觸發(fā)器觸發(fā),自動修改所借圖書的是否借出改為‘是’。該存儲過程要求:l 還書時輸入借書證號,圖書編號。*該存儲過程主體部分只有一條UPDATE語句。2(4)問題及解決方案1)問題一:步驟一中無法識別“seq_id”標(biāo)識符 原因:未創(chuàng)建seq_id序列 解決方案:先創(chuàng)建該序列2)問題二:步驟3無法執(zhí)行原因:已創(chuàng)建的table中無“借書”項(xiàng)解決方案:將原代碼中的“借書”改為“借閱” 3)問題三:步驟二中出現(xiàn)無法識別的符號 原因:將英文分號誤寫為中文分號 解決方案:修正為英文分號“;” 4)問題四:原因:變量賦值過程中使用了錯誤的賦值語句 解決方案:將bnum改為圖書編號五、思考與總結(jié)(4)在創(chuàng)建trigger之前應(yīng)先創(chuàng)建sequence,避免出現(xiàn)序列號無法識別的錯誤(5)書寫存儲語句時,應(yīng)注意涉及的表格和屬性名應(yīng)與創(chuàng)建表格時相同(6)注意區(qū)分中英文符號,避免出現(xiàn)符號無法識別以及程序沒有結(jié)尾等錯誤(7)注意區(qū)別where和having的用法(8)注意空格的使用,避免出現(xiàn)缺少或多余的空格,造成語法錯誤六、附:實(shí)驗(yàn)源代碼(1)create sequence seq_借閱 start with 8 increment by 1 nomaxvalue nocycle nocache。end。create or replace trigger tr_預(yù)約流水號 before insert on 預(yù)約 for each rowbeginselect into : from dual。(3)create or replace procedure p_borrow_book_xg(p_jszh in number,p_tsbh in number)as v_sfjc %type。if v_sfjc=39。 theninsert into 借閱(借書證號,圖書編號,借書日期)values(p_jszh,p_tsbh,to_date(to_char(sysdate,39。),39。))。是39。mit。該圖書已經(jīng)借出!39。end if。(4)create or replace trigger tr_借書 before insert on 借閱 for each rowbeginif inserting thenupdate 圖書 set 是否借出=39。 where 圖書編號=:。end if。(5)create or replace procedure p_return_圖書(p_借書證號 in number,p_圖書編號 in number)as beginupdate 借閱 set 歸還日期=to_date(to_char(sysdate,39。),39。),罰款分類號=p_罰款分類號 where 借書證號=p_借書證號 and 圖書編號=p_圖書編號。否39。mit。(6)create or replace trigger tr_還書after updateon 借閱for each row beginif updating thenupdate 圖書 set 是否借出 = 39。 where 圖書編號 = :。end。(2)遵守紀(jì)律,不遲到,不曠課。(4)保持實(shí)驗(yàn)室安靜、整潔,愛護(hù)公物。自行設(shè)計(jì)SQL語句。每執(zhí)行一句記錄執(zhí)行情況,主要是錯誤信息和錯誤原因。(4)根據(jù)實(shí)驗(yàn)過程的記錄書寫實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)報(bào)告封面內(nèi)容實(shí)驗(yàn)名稱:(如實(shí)驗(yàn)一 數(shù)據(jù)庫創(chuàng)建)班級名稱:(如計(jì)科101班)學(xué)生學(xué)號: 學(xué)生姓名: 實(shí)驗(yàn)時間:實(shí)驗(yàn)報(bào)告內(nèi)容見各具體實(shí)驗(yàn)項(xiàng)目的要求。實(shí)驗(yàn)環(huán)境Microsoft SQL Server2012 2 實(shí)驗(yàn)一:數(shù)據(jù)定義及更新語句練習(xí)一、二、實(shí)驗(yàn)?zāi)康模菏炀氄莆沼肧QL語句實(shí)現(xiàn)數(shù)據(jù)庫和基本表的創(chuàng)建、數(shù)據(jù)的更新。三、實(shí)驗(yàn)內(nèi)容:(一)用SQL語句建立如下mySPJ數(shù)據(jù)庫,包括S,P,J,和SPJ四個基本表(教材第二章習(xí)題5中的四個表),要求實(shí)現(xiàn)關(guān)系的三類完整性。P(PNO,PNAME,COLOR,WEIGHT)。SPJ(SNO,PNO,JNO,QTY)供應(yīng)商表S由供應(yīng)商代碼(SNO)、供應(yīng)商姓名(SNAME)、供應(yīng)商狀態(tài)(STATUS)、供應(yīng)商所在城市(CITY)組成。工程項(xiàng)目表J由工程項(xiàng)目代碼(JNO)、工程項(xiàng)目名(JNAME)、工程項(xiàng)目所在城市(CITY)組成。(二)分別使用插入、刪除、修改的方式更新基本表中的數(shù)據(jù)。(二)在數(shù)據(jù)庫mySPJ中建立S,P,J,和SPJ四個基本表:按照實(shí)驗(yàn)內(nèi)容給出的基本表結(jié)構(gòu)在查詢分析器窗口中書寫SQL語句分別建立各表,并設(shè)置主鍵和外鍵約束;(三)更新表數(shù)據(jù): 語句將習(xí)題中給出的示例記錄插入各表。②將spj表中所有天津供應(yīng)商的QTY屬性值減少10。五、思考題:(一)在為各表設(shè)定關(guān)鍵字時彈出的頁面中有關(guān)鍵字和索引選項(xiàng),試通過給基本表設(shè)定這兩個項(xiàng)目并說明二者的區(qū)別。六、實(shí)驗(yàn)報(bào)告要求:(一)實(shí)驗(yàn)?zāi)康模?二)實(shí)驗(yàn)內(nèi)容:(三)完成情況(附上設(shè)計(jì)的SQL語句)。(五)問題及解決:首先寫出執(zhí)行語句不成功的時候系統(tǒng)報(bào)告的錯誤信息。(六)回答思考題提出的問題,(七)實(shí)驗(yàn)總結(jié):心得體會,建議等。二、預(yù)習(xí)要求:實(shí)驗(yàn)前復(fù)習(xí)講授過的有關(guān)簡單查詢與多表查詢的知識,編寫相應(yīng)的SQL語句。③查詢工程名稱中含有“廠”字的工程明細(xì)。②自然連接:查詢所有的供應(yīng)明細(xì),要求顯示供應(yīng)商、零件和工程的名稱,并按照供應(yīng)、工程、零件排序。⑤右連接:求spj表和j表的右連接。五、思考題:查看實(shí)驗(yàn)內(nèi)容2中左連接和右連接的執(zhí)行結(jié)果