Oracle數(shù)據(jù)庫管理與開發(fā)(慕課版)尚展壘習題答案_第1頁
Oracle數(shù)據(jù)庫管理與開發(fā)(慕課版)尚展壘習題答案_第2頁
Oracle數(shù)據(jù)庫管理與開發(fā)(慕課版)尚展壘習題答案_第3頁
Oracle數(shù)據(jù)庫管理與開發(fā)(慕課版)尚展壘習題答案_第4頁
Oracle數(shù)據(jù)庫管理與開發(fā)(慕課版)尚展壘習題答案_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Oracle數(shù)據(jù)庫管理與開發(fā)(慕課版)尚展壘習題答案1-1如何區(qū)分數(shù)據(jù)庫系統(tǒng)和數(shù)據(jù)庫管理系統(tǒng)?數(shù)據(jù)庫系統(tǒng)是實現(xiàn)有組織地、動態(tài)地存儲大量關聯(lián)數(shù)據(jù)、方便多用戶訪問的計算機軟件、硬件和數(shù)據(jù)資源組成的系統(tǒng),是采用數(shù)據(jù)庫技術的計算機系統(tǒng)。數(shù)據(jù)庫管理系統(tǒng)是指數(shù)據(jù)庫系統(tǒng)中對數(shù)據(jù)進行管理的軟件系統(tǒng),是數(shù)據(jù)庫系統(tǒng)的核心組成部分,包括對數(shù)據(jù)庫的定義、查詢、更新及各種控制,都是通過DBMS進行的。1-2舉例關系型數(shù)據(jù)庫語言都有哪些。SQLServer、Access、Oracle、MySQL、DB21-3安裝Oracle數(shù)據(jù)庫時,提示“空間不足……無法復制”之類的錯誤,怎么辦?安裝Oracle數(shù)據(jù)庫時,提示“空間不足……無法復制”之類的錯誤,點取消后,重新安裝,提示“在oraparam.ini文件中未找到先決條件檢查,不執(zhí)行系統(tǒng)先決條件檢查”的錯誤提示,怎么辦?出現(xiàn)“空間不足……無法復制”是由于硬盤上的空間不足造成的,你需要釋放硬盤控件;而在取消重裝時出現(xiàn)錯誤,主要是Oracle沒有卸載干凈造成的,可以通過以下步驟卸載Oracle,然后再進行安裝。(1)打開“控制面板”/“服務”,停止所有的Oracle服務。(2)打開注冊表,刪除HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE注冊表項。(3)打開注冊表,刪除HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application注冊表項下的所有以Oracle開發(fā)的子項。(4)打開“控制面板”/“系統(tǒng)”/“環(huán)境變量”,刪除%ORACLE_HOME%環(huán)境變量。(5)從桌面上、啟動菜單、程序菜單中,刪除所有有關Oracle的組和圖標。(6)重新啟動計算機,刪除所有的Oracle目錄。通過以上步驟,即可將已經(jīng)安裝的Oracle完成刪除干凈,接下來重新安裝Oracle即可。1-4創(chuàng)建SQL*Plus快捷方式。1-5如果忘記Oracle的登錄密碼,要如何進行登錄?打開SQLPlus命令窗口,直接輸入conn/assysdba命令即可登錄,登錄之后,可以使用“alterusersysidentifiedby新密碼”修改密碼。1-6在“運行”窗口下輸入sqlplus訪問SQL*Plus。(1)可以在“運行”窗口下輸入sqlplus訪問SQL*Plus,不需要提供用戶名或密碼。SQL*Plus會提示輸入用戶名和密碼。操作步驟如下所示:Step1單擊“開始”—>“運行”命令,打開“運行”窗口,在“打開”文本框中輸入:sqlplus,單擊確定按鈕。Step2在彈出的sqlplus.exe界面中,輸入用戶名:scott,口令:tiger,即可連接Oracle數(shù)據(jù)庫。

2-1從數(shù)據(jù)字典dba_segments中,查詢數(shù)據(jù)庫中所有段的存儲空間。colsegment_namefora30;coltablespace_namefora30;selectsegment_name,bytes,tablespace_namefromdba_segments;2-2從數(shù)據(jù)字典v$datafile中,查詢數(shù)據(jù)庫所使用的數(shù)據(jù)文件。colnamefora50;selectname,bytesfromv$datafile;2-3獲取哪些用戶在使用數(shù)據(jù)庫。selectusernamefromv$session;2-4Oracle數(shù)據(jù)庫實例與Oracle用戶的關系。2-5使用代碼創(chuàng)建額外的表空間。createtablespacetempdatafile'E:\app\Administrator\oradata\mydb\temp01.dbf'size100M;2-6如何獲取數(shù)據(jù)庫的SID?可以通過“selectnamefromv$database;”語句獲得,也可以通過打開init.ora文件直接查看。

3-1在Oracle數(shù)據(jù)庫中創(chuàng)建一個表空間,表空間大小為100M,然后將其設置為默認永久表空間。創(chuàng)建大小為100M表空間的代碼如下:createtablespacetbs_testdatafile'D:\OracleFiles\OracleData\datafile_test.dbf'size100mextentmanagementlocalautoallocatesegmentspacemanagementauto;將表空間設置為默認永久表空間的代碼如下:alterdatabasedefaulttablespacetbs_test;3-2在Oracle數(shù)據(jù)庫中創(chuàng)建一個臨時表空間,然后將其設置為默認臨時表空間。創(chuàng)建大小為100M臨時表空間的代碼如下:createtemporarytablespacetemp_testtempfile'D:\OracleFiles\tempfiles\temp_test.tpf'size100m;將表空間設置為默認臨時表空間的代碼如下:alterdatabasedefaulttemporarytablespacetemp_test;3-3使用下面代碼創(chuàng)建臨時表空間:SQL>createtemporarytablespacetbltempfile‘/home/oracle/oradate/ora/temptt.ora2’size100Mautoextendonnext10Mmaxsize200Mextentmanagementlocalautoallocate;執(zhí)行該段代碼時,出現(xiàn)“invalidoptionforcreatetemporarytablespace”的錯誤提示,這是什么原因?該錯誤主要是由autoallocate引起的,在創(chuàng)建臨時表空間時,不允許使用autoallocate關鍵字。3-4創(chuàng)建一個學生檔案信息表students,該表包括了學生編號、學生姓名、性別、年齡、系別編號、班級編號和建檔日期等信息。3-5使用命令將表XSB重命名為stu。renameXSBtostu;

4-1在SCOTT模式下,使用all關鍵字過濾工資(sal)同時不等于3000、950和800的員工記錄。SQL>selectempno,ename,salfromempwheresal<>all(3000,950,800);4-2使用LIKE關鍵字,在emp表中,要顯示在1981年雇傭的所有員工的信息。SQL>selectempno,ename,sal,hiredatefromempwherehiredatelike'%81';4-3在emp表中,查詢工作時SALESMAN的員工姓名,但是不記得SALESMAN的準確拼寫,但還記得它的第1個字符是S,第3個字符是L,第5個字符為S。SQL>selectempno,ename,jobfromempwherejoblike'S_L_S%';4-4在SCOTT模式下,創(chuàng)建一個dept表與emp表相互關聯(lián)的視圖,并要求該視圖只能查詢部門編號為20的記錄信息。4-5通過emp_view_complex視圖查詢部門員工的工資信息。SQL>select*fromemp_view_complexorderby部門編號;4-6Oracle中如何搜索前N條記錄?select*from數(shù)據(jù)表whereRownum<=N;4-7使用“關聯(lián)子查詢”檢索emp表中工資小于同職位平均工資的員工信息。selectempno,ename,salfromempfwheresal<(selectavg(sal)fromempwherejob=f.job)orderbyjob;

5-1在SCOTT模式下,在emp表的job和sal列上創(chuàng)建一個組合索引。SQL>createindexemp_job_sal_idxonemp(job,sal);5-2創(chuàng)建一張部門表temp_dept,要求部門名稱不能為空。SQL>createtabletemp_dept(deptnonumber(3),dnamevarchar2(15)notnull);5-3向temp_dept表中插入一條數(shù)據(jù),如下:SQL>insertintotemp_dept(deptno,dname)values(20,’’);會出現(xiàn)什么樣的結果?錯誤提示。Oracle系統(tǒng)拒絕插入,因為該行數(shù)據(jù)中部門名為空,它不滿足此列上所定義的約束——非空。5-4通過數(shù)據(jù)字典user_constraints查看scott用戶所創(chuàng)建的所有的約束。5-5為temp_dept表的deptno字段增加主鍵約束。SQL>altertabletemp_deptaddconstraintpk_deptnoprimarykey(deptno);

6-1編寫PL/SQL塊,輸入一個雇員編號,而后取得指定的雇員姓名。DECLARE v_eno NUMBER; v_ename VARCHAR2(10);BEGIN v_eno:=&empno; --由鍵盤輸入雇員編號 SELECTenameINTOv_enameFROMempWHEREempno=v_eno; DBMS_OUTPUT.put_line('編號為:'||v_eno||'雇員的名字為:'||v_ename);END;/6-2用戶輸入一個雇員編號,根據(jù)它所在的部門給上漲工資,規(guī)則:10部門上漲10%,20上漲20%,30上漲30%;但是要求最高不能超過5000,超過5000就停留在5000。DECLARE v_empSal emp.sal%TYPE; --定義變量與emp.sal字段類型相同 v_dno emp.deptno%TYPE; --定義變量與emp.deptno字段類型相同 v_eno emp.empno%TYPE; --定義變量與emp.empno字段類型相同BEGIN v_eno:=&inputEmpno; --用戶輸入要查找的雇員編號 SELECTdeptno,salINTOv_dno,v_empSalFROMempWHEREempno=v_eno; IFv_dno=10THEN IFv_empSal*1.1>5000THEN UPDATEempSETsal=5000WHEREempno=v_eno; ELSE UPDATEempSETsal=sal*1.1WHEREempno=v_eno; ENDIF; ELSIFv_dno=20THEN IFv_empSal*1.2>5000THEN UPDATEempSETsal=5000WHEREempno=v_eno; ELSE UPDATEempSETsal=sal*1.2WHEREempno=v_eno; ENDIF; ELSIFv_dno=30THEN IFv_empSal*1.3>5000THEN UPDATEempSETsal=5000WHEREempno=v_eno; ELSE UPDATEempSETsal=sal*1.3WHEREempno=v_eno; ENDIF; ELSE null; ENDIF;END;/6-3輸入雇員編號,根據(jù)雇員的職位進行工資提升,提升要求如下 如果職位是辦事員(CLERK),工資增長5%; 如果職位是銷售人員(SALESMAN),工資增長8%; 如果職位為經(jīng)理(MANAGER),工資增長10%; 如果職位為分析員(ANALYST),工資增長20%; 如果職位為總裁(PRESIDENT),工資不增長。DECLARE v_job emp.job%TYPE; v_eno emp.empno%TYPE;BEGIN v_eno:=&inputEmpno; SELECTjobINTOv_jobFROMempWHEREempno=v_eno; CASEv_job WHEN'CLERK'THEN UPDATEempSETsal=sal*1.05WHEREempno=v_eno; WHEN'SALESMAN'THEN UPDATEempSETsal=sal*1.08WHEREempno=v_eno; WHEN'MANAGER'THEN UPDATEempSETsal=sal*1.10WHEREempno=v_eno; WHEN'ANALYST'THEN UPDATEempSETsal=sal*1.20WHEREempno=v_eno; ELSE DBMS_OUTPUT.put_line('雇員:'||v_eno||'工資不具備上漲資格!'); ENDCASE;END;/6-4PL/SQL語法中用什么關鍵字聲明變量、什么關鍵字編寫語句、用什么關鍵字用于異常處理,最后必須通過什么關鍵字來標記完結?6-5在Oracle數(shù)據(jù)庫中執(zhí)行存儲過程時,出現(xiàn)“ORA-06512:at“SYS.DBMS_OUTPUT”,line35”這樣的錯誤信息,應該如何解決?該錯誤出現(xiàn)的原因是在存儲過程中使用了dbms_output.put_line(),由于存儲過程中有循環(huán),因此輸出量比較大,致使緩存不夠用,所以出現(xiàn)了錯誤。解決該問題時,可以使用setserveroutputonsize語句將Oracle的緩存設置大一點即可。

7-1定義過程,根據(jù)雇員編號找到雇員姓名及工資。CREATEORREPLACEPROCEDUREget_emp_info_proc(p_enoemp.empno%TYPE)AS v_ename emp.ename%TYPE; v_sal emp.sal%TYPE; v_count NUMBER;BEGIN SELECTCOUNT(empno)INTOv_countFROMempWHEREempno=p_eno; IFv_count=0THEN --沒有發(fā)現(xiàn)數(shù)據(jù) RETURN; --結束過程調用 ENDIF; SELECTename,salINTOv_ename,v_salFROMempWHEREempno=p_eno; DBMS_OUTPUT.put_line('編號為'||p_eno||'的雇員姓名:'||v_ename||',工資:'||v_sal);END;/7-2利用過程增加部門。CREATEORREPLACEPROCEDUREdept_insert_proc( p_dnodept.deptno%TYPE, p_dnadept.dname%TYPE, p_dlodept.loc%TYPE)AS v_deptCount NUMBER; --保存COUNT()函數(shù)結果BEGIN SELECTCOUNT(deptno)INTOv_deptCountFROMdeptWHEREdeptno=p_dno; --統(tǒng)計 IFv_deptCount>0THEN --有此編號的部門 RAISE_APPLICATION_ERROR(-20789,'增加失敗:該部門已存在!'); ELSE INSERTINTOdept(deptno,dname,loc)VALUES(p_dno,p_dna,p_dlo); DBMS_OUTPUT.put_line('新部門增加成功!'); COMMIT; ENDIF;EXCEPTION WHENothersTHEN DBMS_OUTPUT.put_line('SQLERRM='||SQLERRM); ROLLBACK; --事務回滾END;/7-3利用觸發(fā)器,在星期一、周末及每天下班時間(每天9:00以前、18:00以后)后不允許更新emp數(shù)據(jù)表。CREATEORREPLACETRIGGERforbid_emp_triggerBEFOREINSERTORDELETEORUPDATEONempDECLARE v_currentweak VARCHAR(20); v_currenthour VARCHAR(20);BEGIN SELECTTO_CHAR(SYSDATE,'day'),TO_CHAR(SYSDATE,'hh24')INTOv_currentweak,v_currenthourFROMdual; IFTRIM(v_currentweak)='星期一'ORTRIM(v_currentweak)='星期六'ORTRIM(v_currentweak)='星期日'THEN RAISE_APPLICATION_ERROR(-20008,'在周末及周一不允許更新emp數(shù)據(jù)表!'); ELSIFTRIM(v_currenthour)<'9'ORTRIM(v_currenthour)>'18'THEN RAISE_APPLICATION_ERROR(-20009,'在下班時間不能夠修改emp表數(shù)據(jù)!'); ENDIF;END;/7-4編寫觸發(fā)器,在每天12點以后,不允許修改雇員工資和獎金。7-5每一位雇員都要根據(jù)其收入上繳所得稅,假設所得稅的上繳原則為:2000以下上繳3%、2000~5000上繳8%、5000以上上繳10%,現(xiàn)在要求建立一張新的數(shù)據(jù)表,可以記錄出雇員的編號、姓名、工資、傭金、上繳所得稅數(shù)據(jù),并且在每次修改雇員表中sal和comm字段后可以自動更新記錄。DROPTABLEemp_taxPURGE;CREATETABLEemp_tax( empno NUMBER(4), ename VARCHAR2(10), sal NUMBER(7,2), comm NUMBER(7,2), tax NUMBER(7,2), CONSTRAINTpk_empnoPRIMARYKEY(empno), CONSTRAINTfk_empnoFOREIGNKEY(empno)REFERENCESemp(empno)ONDELETECASCADE);CREATEORREPLACETRIGGERforbid_emp_triggerAFTERUPDATEORINSERTOFename,sal,commONempDECLARE PRAGMAAUTONOMOUS_TRANSACTION; --觸發(fā)器自治事務 CURSORcur_empISSELECT*FROMemp; --定義游標,找到每行紀錄 v_empRow emp%ROWTYPE; --保存emp的每行紀錄 v_salary emp.sal%TYPE; --計算總收入 v_empTax emp_tax.tax%TYPE; --保存稅收的數(shù)值BEGIN DELETEFROMemp_tax; --清空emp_tax表的紀錄 FORv_empRowINcur_empLOOP v_salary:=v_empRow.sal+NVL(v_empRm,0); --計算總工資 IFv_salary<2000THEN v_empTax:=v_salary*0.03; --上繳3%的稅 ELSIFv_salaryBETWEEN2000AND5000THEN v_empTax:=v_salary*0.08; --上繳8%的稅 ELSIFv_salary>5000THEN v_empTax:=v_salary*0.1; --上繳10%的稅 ENDIF; INSERTINTOemp_tax(empno,ename,sal,comm,tax)VALUES (v_empRow.empno,v_empRow.ename,v_empRow.sal,v_empRm,v_empTax); ENDLOOP; COMMIT; --提交事務END;/

9-1創(chuàng)建角色并為其授予連接和創(chuàng)建表權限。createrolemridentifiedby123456;grantconnect,createtabletomr;9-2區(qū)分Oracle的系統(tǒng)權限與對象權限。系統(tǒng)權限是在系統(tǒng)級對數(shù)據(jù)庫進行存取和使用的機制,比如,用戶是否能夠連接到數(shù)據(jù)庫系統(tǒng)(SESSION權限),執(zhí)行系統(tǒng)級的DDL語句(如CREAT、ALTER、和DROP)等;而對象權限是指某一個用戶對其他用戶的表、視圖、序列、存儲過程、函數(shù)、包等的操作權限,不同類型的對象具有不同的對象權限,對于某些模式對象,比如簇、索引、觸發(fā)器、數(shù)據(jù)庫鏈接等沒有相應的實體權限,這些權限由系統(tǒng)權限進行管理。9-3區(qū)分用戶與方案。用戶是在數(shù)據(jù)庫中定義的一個名稱,更準確地說它是賬戶,只是習慣上稱其為用戶,它是Oracle數(shù)據(jù)庫的基本訪問控制機制,當連接到Oracle數(shù)據(jù)庫時,操作人員必須提供正確的用戶名和密碼;而方案是用戶所擁有的數(shù)據(jù)庫對象的集合。在Oracle數(shù)據(jù)庫中,對象是以用戶來組織的,用戶與方案是一一對應的關系,并且兩者名稱相同。9-4在Oracle數(shù)據(jù)庫中撤銷用戶dongfang的createtable權限,然后以用戶xifang登錄數(shù)據(jù)庫,并創(chuàng)建一個tb_xifang_2數(shù)據(jù)表(將dongfang的createtable權限傳遞給xifang)。9-5通過v$fixed_view_definition查看數(shù)據(jù)庫中內部系統(tǒng)表信息的功能。select*fromv$fixed_view_definition; name VARCHAR2(20) NOTNULL, CONSTRAINTpk_midPRIMARYKEY(mid)

10-1沒有備份、只有歸檔日志時,如何恢復數(shù)據(jù)文件?可以通過重建數(shù)據(jù)文件來進行恢復,前提是歸檔日志保存完整10-2何時可以刪除歸檔日志?在每一次全備份或基于全備份的增量備份后,都可以刪除該備份點之前的歸檔日志。10-3全備份時一定要備份所有數(shù)據(jù)文件嗎?不需要,起碼有兩類數(shù)據(jù)文件可以不備份,一類是臨時數(shù)據(jù)文件,如果丟失,可以刪除后重建;另一類是只讀表空間數(shù)據(jù)文件,如果上次備份以來沒有修改過表空間的只讀屬性,就不需要備份。10-4聯(lián)機日志需要備份嗎?10-5使用EXP工具導出數(shù)據(jù)正常,但是使用導出的數(shù)據(jù)再進行導入時,卻出現(xiàn)“表或視圖不存在”的錯誤,這是為什么?該錯誤是由于在Oracle11g中,如果表中沒有數(shù)據(jù),Oracle不會自動為其創(chuàng)建segment,即在user_segments中查不到該表的數(shù)據(jù)庫,而使用EXP導出數(shù)據(jù)時,是從user_segments中讀取表的信息,所以就會產(chǎn)生丟失表的現(xiàn)象,以至于在導入數(shù)據(jù)時,產(chǎn)生“表或視圖不存在”的錯誤。可以通過修改deferred_segment_creation參數(shù)的值為false,避免該錯誤的發(fā)生,代碼如下:altersystemsetdeferred_segment_creation=falsescope=memory;altersystemsetdeferred_segment_creation=falsescope=spfile;altersystemprocesses=400scope=spfile; PRAGMAAUTONOMOUS_TRANSACTION; --觸發(fā)器自治事務 CURSORcur_empISSELECT*FROMemp; --定義游標,找到每行紀錄 v_empRow emp%ROWTYPE; --保存emp的每行紀錄 v_salary emp.sal%TYPE; --計算總收入 v_empTax emp_tax.tax%TYPE; --保存稅收的數(shù)值BEGIN DELETEFROMemp_tax; --清空emp_tax表的紀錄 FORv_empRowINcur_empLOOP v_salary:=v_empRow.sal+NVL(v_empRm,0); --計算總工資10-6在SQLPlus命令工具中編寫SQL語句,實現(xiàn)向scott方案中導入test.sql文件中的DDL語句的功能。C:\impdpscott/1qaz2wsxdirectory=dump_dirdumpfile=sqlfile.dmpsqlfile=test.sql IFv_salary<2000THEN v_empTax:=v_salary*0.03; --上繳3%的稅 ELSIFv_salaryBETWEEN2000AND5000THEN v_empTax:=v_salary*0.08; --上繳8%的稅 ELSIFv_salary>5000THEN v_empTax:=v_salary*0.1; --上繳10%的稅 ENDIF; INSERTINTOemp_tax(empno,ename,sal,comm,tax)VALUES (v_empRow.empno,v_empRow.ename,v_empRow.sal,v_empRm,v_empTax); ENDLOOP; COMMIT; --提交事務END;/

11-1在Oracle數(shù)據(jù)庫中執(zhí)行閃回操作時,出現(xiàn)“ORA-08189:無法閃回表,因為不支持使用FLASHBACK命令完成行移動”的錯誤提示,如何解決該錯誤?遇到該錯誤時,需要執(zhí)行下面的命令:ALTERTABLE表名ENABLER

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論