Oracle11g數(shù)據(jù)庫基礎(chǔ)教程-參考答案_第1頁
Oracle11g數(shù)據(jù)庫基礎(chǔ)教程-參考答案_第2頁
Oracle11g數(shù)據(jù)庫基礎(chǔ)教程-參考答案_第3頁
Oracle11g數(shù)據(jù)庫基礎(chǔ)教程-參考答案_第4頁
Oracle11g數(shù)據(jù)庫基礎(chǔ)教程-參考答案_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Oracle11g數(shù)據(jù)庫根底教程參考答案Oracle11g數(shù)據(jù)庫安裝與配置1.簡答題〔1〕企業(yè)版數(shù)據(jù)庫效勞器包含所有的數(shù)據(jù)庫組件,主要針對高端的應(yīng)用環(huán)境,適用于平安性和性能要求較高的聯(lián)機事務(wù)處理〔OLTP〕、查詢密集型的數(shù)據(jù)倉庫和要求較高的Internet應(yīng)用程序:標準版數(shù)據(jù)庫效勞器提供大局部核心的數(shù)據(jù)庫功能和特性,適合于工作組或部門級的應(yīng)用程序:個人版數(shù)據(jù)庫效勞器只提供根本數(shù)據(jù)庫管理功能和特性,適合單用戶的開發(fā)環(huán)境,為用戶提供開發(fā)測試平臺?!?〕常用數(shù)據(jù)庫類型包括事務(wù)處理類、數(shù)據(jù)倉庫類以通用類型。其中事務(wù)處理類型主要針對具有大量并發(fā)用戶連接,并且用戶主要執(zhí)行簡單事務(wù)處理的應(yīng)用環(huán)境。事務(wù)處理數(shù)據(jù)庫的典型應(yīng)用有銀行系統(tǒng)數(shù)據(jù)庫、Internet電子商務(wù)數(shù)據(jù)庫、證券交易系統(tǒng)數(shù)據(jù)庫等。對于需要較高的可用性和事務(wù)處理性能、存在大量用戶并行訪問相同數(shù)據(jù)以及需要較高恢復性能的數(shù)據(jù)庫環(huán)境,事務(wù)處理類型的配置可以提供最正確性能;數(shù)據(jù)倉庫類型的數(shù)據(jù)庫主要針對有大量的對某個主題進行復雜查詢的應(yīng)用環(huán)境。數(shù)據(jù)倉庫的典型應(yīng)用有客戶訂單研究、支持呼叫、銷售預(yù)測、采購模式以及其他戰(zhàn)略性業(yè)務(wù)問題的歷史數(shù)據(jù)研究。對于需要對大量數(shù)據(jù)進行快速訪問,以及復雜查詢的數(shù)據(jù)庫環(huán)境,數(shù)據(jù)倉庫類型配置是最正確選擇;通用類型配置的數(shù)據(jù)庫是事務(wù)處理數(shù)據(jù)庫與數(shù)據(jù)倉庫配置的折衷方案。既可以支持大量并發(fā)用戶的事務(wù)處理,又可以快速對大量歷史數(shù)據(jù)進行復雜的數(shù)據(jù)掃描和處理?!?〕數(shù)據(jù)庫名可以由字母、數(shù)字、下劃線〔_〕、#和美元符號〔$〕組成,且必須以字母開頭,長度不超過30個字符。在單機環(huán)境中,可以不設(shè)置域名,域名長度不能超過128個字符。Oracle效勞標識符〔SID〕是一個Oracle實例的唯一名稱標識,長度不能超過12個字符?!?〕OracleServiceORCL:數(shù)據(jù)庫效勞〔數(shù)據(jù)庫實例〕,是Oracle核心效勞,是數(shù)據(jù)庫啟動的根底,只有該效勞啟動,Oracle數(shù)據(jù)庫才能正常啟動?!脖仨殕印砄racleOraDb11g_home1TNSListener:監(jiān)聽器效勞,該效勞只有在遠程訪問數(shù)據(jù)庫時才需要〔無論遠程計算機還是本地計算機,但凡通過OracleNet網(wǎng)絡(luò)協(xié)議連接數(shù)據(jù)庫都屬于遠程訪問〕?!脖仨殕印砄racleOraDb11g_home1ConfigurationManager:配置Oracle啟動時的參數(shù)的效勞。〔非必須啟動〕OracleOraDb11g_home1ClrAgent:提供對.NET支持的Oracle數(shù)據(jù)庫擴展效勞?!卜潜仨殕印砄racleJobSchedulerORCL:數(shù)據(jù)庫作業(yè)調(diào)度效勞?!卜潜仨殕印砄racleDBConsoleorcl:Oracle控制臺效勞,即企業(yè)管理器效勞。只有該效勞啟動了,才可以使用Web方式的企業(yè)管理器管理數(shù)據(jù)庫?!卜潜仨殕印砄racleVssWriterORCL:是Oracle對VSS提供支持的效勞?!卜潜仨殕印砄racleMTSRecoveryService:是允許數(shù)據(jù)庫充當一個微軟事務(wù)效勞器、COM/COM+對象和分布式環(huán)境下的事務(wù)資源管理器的效勞。2.實訓題〔1〕略〔2〕翻開網(wǎng)絡(luò)管理對話框,分別選中左側(cè)樹狀結(jié)構(gòu)中的監(jiān)聽器和數(shù)據(jù)庫,修改右側(cè)對話框中的主機名為當前的計算機名?!?〕略第2章Oracle數(shù)據(jù)庫管理與開發(fā)工具1.簡答題〔1〕實現(xiàn)對Oracle運行環(huán)境的完全管理,包括Oracle數(shù)據(jù)庫、Oracle應(yīng)用效勞器、HTTP效勞器等的管理;實現(xiàn)對單個Oracle數(shù)據(jù)庫的本地管理,包括系統(tǒng)監(jiān)控、性能診斷與優(yōu)化、系統(tǒng)維護、對象管理、存儲管理、平安管理、作業(yè)管理、數(shù)據(jù)備份與恢復、數(shù)據(jù)移植等;實現(xiàn)對多個Oracle數(shù)據(jù)庫的集中管理;實現(xiàn)對Oracle應(yīng)用效勞器的管理;檢查與管理目標計算機系統(tǒng)軟硬件配置。〔2〕利用SQL*Plus可以實現(xiàn)以下操作:輸入、編輯、存儲、提取、運行和調(diào)試SQL語句和PL/SQL程序;開發(fā)、執(zhí)行批處理腳本;執(zhí)行數(shù)據(jù)庫管理;處理數(shù)據(jù),生成報表,存儲、打印、格式化查詢結(jié)果;檢查表和數(shù)據(jù)庫對象定義。〔3〕建立與數(shù)據(jù)庫的連接后,可以利用SQLDeveloper實現(xiàn)各種數(shù)據(jù)庫管理與開發(fā)操作,包括瀏覽數(shù)據(jù)庫對象、進行數(shù)據(jù)的DML操作〔插入、刪除、修改數(shù)據(jù)〕、進行DDL操作〔創(chuàng)立、修改、刪除數(shù)據(jù)庫對象〕、開發(fā)和調(diào)試PL/SQL程序、進行數(shù)據(jù)的導出與導入以及創(chuàng)立與生成報表等操作?!?〕Oracle提供的ONCA可以實現(xiàn)以下的網(wǎng)絡(luò)配置任務(wù)。監(jiān)聽程序配置:可以添加、重新配置、刪除或重命名監(jiān)聽程序。監(jiān)聽程序是數(shù)據(jù)庫效勞器響應(yīng)用戶連接請求的進程。命名方法配置:選擇命名方法。命名方法是將用戶連接時使用的連接標識符解析成連接描述符的方法。本地網(wǎng)絡(luò)效勞名配置:可以添加、重新配置、刪除、重命名或測試本地網(wǎng)絡(luò)效勞名,本地網(wǎng)絡(luò)效勞名的解析存放在網(wǎng)絡(luò)配置文件tnsnames.ora中。目錄使用配置:可以配置符合LDAP協(xié)議的目錄效勞器。〔5〕Oracle網(wǎng)絡(luò)管理工具ONM是配置和管理Oracle網(wǎng)絡(luò)環(huán)境的一種工具。使用ONM可以對以下的Oracle網(wǎng)絡(luò)特性和組件進行配置和管理。概要文件:確定客戶端如何連接到Oracle網(wǎng)絡(luò)的參數(shù)集合。使用概要文件可以配置命名方法、事件記錄、跟蹤、外部命令參數(shù)以及OracleAdvancedSecurity的客戶端參數(shù)。效勞命名:創(chuàng)立或修改數(shù)據(jù)庫效勞器的網(wǎng)絡(luò)效勞的描述。監(jiān)聽程序:創(chuàng)立或修改監(jiān)聽程序。2.實訓題〔1〕略〔2〕略〔3〕略〔4〕略〔5〕略〔6〕略第3章Oracle數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu)1.簡答題Oracle數(shù)據(jù)庫體系結(jié)構(gòu)由物理存儲結(jié)構(gòu)、邏輯存儲結(jié)構(gòu)和實例組成。其中物理存儲結(jié)構(gòu)描述了操作系統(tǒng)層次數(shù)據(jù)的存儲與管理,包括數(shù)據(jù)文件、日志文件、重做日志文件等組成。邏輯結(jié)構(gòu)描述了數(shù)據(jù)庫內(nèi)部數(shù)據(jù)的組織與管理,由表空間、段、區(qū)、塊組成。實例是數(shù)據(jù)庫運行的軟件結(jié)構(gòu),由內(nèi)存結(jié)構(gòu)和后臺進程組成。數(shù)據(jù)庫運行過程中,用戶的操作在內(nèi)存區(qū)中進行,最終通過后臺進行轉(zhuǎn)化為對數(shù)據(jù)庫的操作。〔2〕Oracle數(shù)據(jù)庫物理結(jié)構(gòu)包括數(shù)據(jù)文件、控制文件、重做日志文件、初始化參數(shù)文件、歸檔文件、口令文件等。在控制文件中記錄了當前數(shù)據(jù)庫所有的數(shù)據(jù)文件的名稱與位置、重做日志文件的名稱與位置,以及數(shù)據(jù)文件、重做日志文件的狀態(tài)等。〔3〕Oracle數(shù)據(jù)庫的邏輯存儲結(jié)構(gòu)分為Oracle數(shù)據(jù)塊〔OracleDataBlock〕、區(qū)〔Extent〕、段〔Segment〕和表空間〔Tablespace〕4種。一個或多個連續(xù)的Ora〔4〕SGA區(qū)由數(shù)據(jù)緩沖區(qū)、共享池、重做日志緩沖區(qū)、大型池、JAVA池構(gòu)成;PGA區(qū)由排序區(qū)、私有SQL區(qū)以及堆棧構(gòu)成。SGA區(qū)是由Oracle分配的共享內(nèi)存結(jié)構(gòu),包含一個數(shù)據(jù)庫實例共享的數(shù)據(jù)和控制信息。當多個用戶同時連接同一個實例時,SGA區(qū)數(shù)據(jù)供多個用戶共享,所以SGA區(qū)又稱為共享全局區(qū)。用戶對數(shù)據(jù)庫的各種操作主要在SGA區(qū)中進行。該內(nèi)存區(qū)隨數(shù)據(jù)庫實例的創(chuàng)立而分配,隨實例的終止而釋放。PGA區(qū)是在用戶進程連接數(shù)據(jù)庫,創(chuàng)立一個會話時,由Oracle為用戶分配的內(nèi)存區(qū)域,保存當前用戶私有的數(shù)據(jù)和控制信息,因此該區(qū)又稱為私有全局區(qū)。每個效勞器進程只能訪問自己的PGA區(qū),所有效勞器進程PGA區(qū)總和即為實例的PGA區(qū)的大小?!?〕Oracle實例的主要后臺進程包括數(shù)據(jù)庫寫進程〔DBWR〕、日志寫進程〔LGWR〕、檢查點進程〔CKPT〕、系統(tǒng)監(jiān)控進程〔SMON〕、進程監(jiān)控進程〔PMON〕、歸檔進程〔ARCH〕、恢復進程〔RECO〕、鎖進程〔LCKn〕、調(diào)度進程〔Dnnn〕等。DBWR進程負責把數(shù)據(jù)高速緩沖區(qū)中已經(jīng)被修改正的數(shù)據(jù)〔“臟〞緩存塊〕成批寫入數(shù)據(jù)文件中永久保存,同時使數(shù)據(jù)高速緩沖區(qū)有更多的空閑緩存塊,保證效勞器進程將所需要的數(shù)據(jù)從數(shù)據(jù)文件讀取到數(shù)據(jù)高速緩沖區(qū)中,提高緩存命中率。LGWR日志寫入進程負責把重做日志緩沖區(qū)的重做記錄寫入重做日志文件中永久保存。CKPT進程的作用就是執(zhí)行檢查點,更新控制文件與數(shù)據(jù)文件的頭部,使其同步;,觸發(fā)DBWR進程,將臟緩存塊寫入數(shù)據(jù)文件。SMON進程的主要功能包括:在實例啟動時負責對數(shù)據(jù)庫進行恢復;回收不再使用的臨時空間;將各個表空間的空閑碎片合并。PMON進程的主要功能包括:負責恢復失敗的用戶進程或效勞器進程,并且釋放進程所占用的資源;去除非正常中斷的用戶進程留下的孤兒會話,回退未提交的事務(wù),釋放會話所占用的鎖、SGA、PGA等資源;監(jiān)控調(diào)度進程和效勞器進程的狀態(tài),如果它們失敗,那么嘗試重新啟動它們,并釋放它們所占用的各種資源。ARCH進程用戶歸檔重做日志文件。RECO進程用戶數(shù)據(jù)庫恢復。〔6〕當以下某個條件滿足時,DBWR進程將啟動,將數(shù)據(jù)高速緩沖區(qū)中的臟數(shù)據(jù)寫入數(shù)據(jù)文件。效勞器進程在數(shù)據(jù)高速緩存區(qū)中搜索一定數(shù)量的緩存塊后,仍然沒有找不到可用的空閑緩存塊,此時DBWR進程將被啟動。檢查點發(fā)生時,將啟動DBWR進程。當數(shù)據(jù)高速緩沖區(qū)中LRU列表長度到達初始化參數(shù)DB_BLOCK_WRITE_BATCH指定值的一半時,DBWR進程將被啟動。DBWR進程發(fā)生超時〔大約3秒〕,DBWR進程將被啟動。〔7〕當以下事件發(fā)生時,LGWR進程將重做日志緩沖區(qū)中的重做記錄寫入重做日志文件。用戶通過COMMIT語句提交當前事務(wù)。重做日志緩沖區(qū)被寫滿三分之一。DBWR進程開始將臟緩存塊寫入數(shù)據(jù)文件。LGWR進程超時〔大約3秒〕,LGWR進程將啟動。3.選擇題DDBBDADBBACACCBAADA第4章案例數(shù)據(jù)庫的創(chuàng)立與客戶端的連接實訓題略略略第5章數(shù)據(jù)庫存儲設(shè)置與管理1.簡答題〔1〕數(shù)據(jù)庫表空間分為系統(tǒng)表空間和非系統(tǒng)表空間兩類,其中非系統(tǒng)表空間包括撤銷表空間、臨時表空間和用戶表空間等。SYSTEM表空間主要用于存儲數(shù)據(jù)庫的數(shù)據(jù)字典、PL/SQL程序的源代碼和解釋代碼、數(shù)據(jù)庫對象的定義。撤銷表空間專門進行回退信息的自動管理。臨時表空間是專門進行臨時段管理的表空間。用戶表空間用于別離不同應(yīng)用的數(shù)據(jù),而且能夠減少讀取數(shù)據(jù)文件時產(chǎn)生的I/O沖突?!?〕一個數(shù)據(jù)庫由一個或多個表空間構(gòu)成,不同的表空間用于存放不同應(yīng)用的數(shù)據(jù),表空間的大小決定了數(shù)據(jù)庫的大小。一個表空間對應(yīng)一個或多個數(shù)據(jù)文件,數(shù)據(jù)文件的大小決定了表空間的大小。一個數(shù)據(jù)文件只能附屬于一個表空間。一個數(shù)據(jù)庫對象只能存儲在一個表空間中,但可以存儲在該表空間所對應(yīng)的一個或多個數(shù)據(jù)文件中?!?〕數(shù)據(jù)文件中保存了數(shù)據(jù)庫中的所有數(shù)據(jù),包括數(shù)據(jù)字典以及用戶數(shù)據(jù)?!?〕控制文件保存數(shù)據(jù)庫的物理結(jié)構(gòu)信息,包括數(shù)據(jù)庫名稱、數(shù)據(jù)文件的名稱與狀態(tài)、重做日志文件的名稱與狀態(tài)等。在數(shù)據(jù)庫啟動時,數(shù)據(jù)庫實例依賴初始化參數(shù)定位控制文件,然后根據(jù)控制文件的信息加載數(shù)據(jù)文件和重做日志文件,最后翻開數(shù)據(jù)文件和重做日志文件。〔5〕重做日志文件是以重做記錄的形式記錄、保存用戶對數(shù)據(jù)庫所進行的修改操作,包括用戶執(zhí)行DDL、DML語句的操作。如果用戶只對數(shù)據(jù)庫進行查詢操作,那么查詢信息是不會記錄到重做日志文件中的。〔6〕歸檔是數(shù)據(jù)庫恢復及熱備份的根底。只用當數(shù)據(jù)庫歸檔模式時,才可以進行熱備份和完全恢復。進行歸檔設(shè)置包括歸檔模式設(shè)置〔ARCHIVELOG〕、歸檔方式設(shè)置以及歸檔路徑的設(shè)置等?!?〕每個數(shù)據(jù)庫至少需要兩個重做日志文件,采用循環(huán)寫的方式進行工作。當一個重做日志文件在進行歸檔時,還有另一個重做日志文件可用。當一個重做日志文件被寫滿后,后臺進程LGWR開始寫入下一個重做日志文件,即日志切換,同時產(chǎn)生一個“日志序列號〞,并將這個號碼分配給即將開始使用的重做日志文件。當所有的日志文件都寫滿后,LGWR進程再重新寫入第一個日志文件?!?〕采用多路復用控制文件可以防止由于一個控制文件的損壞而導致數(shù)據(jù)庫無法正常啟動。在數(shù)據(jù)庫啟動時根據(jù)一個控制文件翻開數(shù)據(jù)庫,在數(shù)據(jù)庫運行時多路復用控制文件采用鏡像的方式進行寫操作,保持所有控制文件的同步。2.實訓題〔1〕createtablespaceUSERTBS1datafile'd:\oracle\oradata\orcl\usertbs1.dbf'size20Mextentmanagementlocal;〔2〕createtablespaceUSERTBS2datafile'd:\oracle\oradata\orcl\usertbs1.dbf'size50Mextentmanagementlocaluniformsize512k;〔3〕alterdatabasedatafile'd:\oracle\oradata\orcl\usertbs1.dbf'autoextendonnext5Mmaxsize100M;〔4〕createtemporarytablespaceTEMPTBStempfile'd:\oracle\oradata\orcl\temptbs.dbf'size20Mextentmanagementlocaluniformsize16K;alterdatabasedefaulttemporarytablespaceTEMPTBS;〔5〕altertablespaceUSERTBS1offline;altertablespaceUSERTBS1online;〔6〕droptablespaceUSERTBS2includingcontentsanddatafiles;〔7〕selecttablespace_name,file_namefromdba_data_files;〔8〕ALTERTABLESPACEUSERSADDDATAFILE‘D:\ORACLE\ORADATA\ORCL\userdata05.dbf’SIZE50M’;〔9〕ALTERTABLESPACEEXAMPLEADDDATAFILE‘D:\ORACLE\ORADATA\ORCL\example05.dbf’SIZE20M’;ALTERDATABASEDATAFILE‘D:\ORACLE\ORADATA\ORCL\userdata05.dbf’AUTOEXTENDONNEXT5MMAXSIZE100M;ALTERDATABASEDATAFILE‘D:\ORACLE\ORADATA\ORCL\example05.dbf’RESIZE40M;SHUTDOWNIMMEDIATE;在操作系統(tǒng)中重命名userdata05.dbf、example05.dbf分別為userdata005.dbf、example005.dbfSTARTUPMOUNT;ALTERDATABASERENAMEFILE‘D:\ORACLE\ORADATA\ORCL\userdata05.dbf’,‘D:\ORACLE\ORADATA\ORCL\example05.dbf’TO‘D:\ORACLE\ORADATA\ORCL\userdata005.dbf’,‘D:\ORACLE\ORADATA\ORCL\example005.dbf’;ALTERDATABASEOPEN;ALTERDATABASEBACKUPCONTROLFILETO‘D:\ORACLE\CONTROL.BKP’;ALTERDATABASEADDLOGFILEGROUP5(‘D:\ORACLE\ORADATA\ORCL\redo05a.log’,’D:\ORACLE\ORADATA\ORCL\redo05b.log’)SIZE5M;ALTERDATABASEADDLOGFILEMEMBER‘D:\ORACLE\ORADATA\ORCL\redo05c.log’TOGROUP5;SHUTDOWNIMMEDIATESTARTUPMOUNTALTERDATABASEARCHIVELOG;ALTERDATABASEOPEN;ALTERSYSTEMARCHIVELOGSTARTALTERSYSTEMSETLOG_ARCHIVE_DEST=’D:\ORACLE\BACKUP’3.選擇題BABBADBCAACBCBBCBCBACBDCAAC第6章數(shù)據(jù)庫對象的創(chuàng)立與管理1.簡答題〔1〕在Oracle數(shù)據(jù)庫中,根據(jù)表生存周期不同,可以分為永久性表和臨時表;根據(jù)表中數(shù)據(jù)組織方式不同,可以分為標準表、索引化表和分區(qū)表。索引化表是一種特殊的表,它按B樹的結(jié)構(gòu)來組織和存儲數(shù)據(jù),將表的數(shù)據(jù)和索引的數(shù)據(jù)存儲在一起。分區(qū)表是將一個表分成假設(shè)干個獨立的組成局部進行存儲和管理?!?〕表的約束包括:主鍵約束:定義了主鍵約束的列取值不能為空,也不能重復。唯一值約束:定義了唯一值約束的列取值不能重復。檢查約束:定義了檢查約束的列取值要滿足檢查條件。外鍵約束:定義了外鍵約束的列取值要么是主表參照列的值,要么是空值。空/非空約束:定義了非空約束的列取值不能為空。〔3〕索引用于提高數(shù)據(jù)的查詢效率。根據(jù)索引值是否唯一,可以分為唯一性索引和非唯一性索引;根據(jù)索引的組織結(jié)構(gòu)不同,可以分為平衡樹索引和位圖索引;根據(jù)索引基于的列數(shù)不同可以分為單列索引和復合索引。視圖是從一個或多個表或視圖中提取出來的數(shù)據(jù)的一種表現(xiàn)形式。在數(shù)據(jù)庫中只有視圖的定義,而沒有實際對應(yīng)“表〞的存在。通過視圖的使用可以提高數(shù)據(jù)的平安性,隱藏數(shù)據(jù)的復雜性,簡化查詢語句,別離應(yīng)用程序與根底表,保存復雜查詢等?!?〕序列是用于產(chǎn)生唯一序列號的數(shù)據(jù)庫對象,可以為多個數(shù)據(jù)庫用戶依次生成不重復的連續(xù)整數(shù),通常使用序列自動生成表中的主鍵值。序列創(chuàng)立后,可以通過序列NEXTVAL屬性產(chǎn)生序列值,通過屬性CURRVAL查看當前的序列值?!?〕分區(qū)的必要性:提高數(shù)據(jù)的平安性,一個分區(qū)的損壞不影響其他分區(qū)中數(shù)據(jù)的正常使用;將表的各個分區(qū)存儲在不同磁盤上,提高數(shù)據(jù)的并行操作能力;簡化數(shù)據(jù)的管理,可以將某些分區(qū)設(shè)置為不可用狀態(tài),某些分區(qū)設(shè)置為可用狀態(tài),某些分區(qū)設(shè)置為只讀狀態(tài),某些分區(qū)設(shè)置為讀寫狀態(tài);操作的透明性,對表進行分區(qū)并不影響操作數(shù)據(jù)的SQL語句。對表進行分區(qū)的方法包括:范圍分區(qū):按照分區(qū)值的范圍對表進行分區(qū)。列表分區(qū):按照分區(qū)值對表進行分區(qū)。散列分區(qū):采用HASH算法在指定數(shù)量的分區(qū)中均等地分配數(shù)據(jù)。復合分區(qū):先對表進行范圍分區(qū),然后對每個分區(qū)進行散列分區(qū)?!?〕本地分區(qū)索引是指為分區(qū)表中的各個分區(qū)單獨創(chuàng)立索引分區(qū),各個索引分區(qū)之間是相互獨立的,索引的分區(qū)與表的分區(qū)是一一對應(yīng)的。全局分區(qū)索引:全局分區(qū)索引是指先對整個表建立索引,然后再對索引進行分區(qū)。索引的分區(qū)之間不是相互獨立的,索引分區(qū)與表分區(qū)之間也不是一一對應(yīng)的全局非分區(qū)索引:建立索引但不分區(qū)2.實訓題〔1〕略〔2〕Createtableexer_class(CNOnumber(2)primarykey,CNAMEvarchar2(20),NUMnumber(3))Createtableexer_student(SNOnumber(4)primarykey,SNAMEvarchar2(10)unique,SAGEnumber,SEXchar(2),CNOnumber(2))〔3〕Altertableexer_studentaddconstraintck_sagecheck(sage>0andsage<=100);〔4〕altertableexer_studentaddconstraintck_stucheck(sex='M'orsex='F')modifysexdefault'M'〔5〕Createuniqueindexind_cnameonexer_class(cname);〔6〕Createviews_casSelectsno,sname,sage,sex,so,cname,numFromexer_classcjoinexer_studentsOnco=so;〔7〕Createsequencesequ1startwith100000001;〔8〕createtableexer_student_range(snonumber(4)primarykey,snamevarchar2(10),sagenumber,sexchar(2),cnonumber(2))partitionbyrange(sage)(partitionpart1valueslessthan(20)tablespaceexample,partitionpart2valueslessthan(30)tablespaceorcltbs1,partitionpart3valueslessthan(maxvalue)tablespaceorcltbs2)〔9〕createtableexer_student_list(snonumber(4)primarykey,snamevarchar2(10),sagenumber,sexchar(2),cnonumber(2))partitionbylist(sex)(partitionmanvalues('M')tablespaceorcltbs1,partitionwomanvalues('F')tablespaceorcltbs2)〔10〕Createindexindonexer_student_range(sno)local;3.選擇題CADBABBACBBCBDACE第7章數(shù)據(jù)操縱與事務(wù)處理1.實訓題〔1〕略〔2〕INSERTINTOBOOKVALUES('100001','冶金工業(yè)出版社','李代平','冶金工業(yè)出版社',TO_DATE('2003-01-01','YYYY-MM-DD'),38);

INSERTINTOBOOKVALUES('100002','Oracle9i中文版入門與提高','趙松濤','人民郵電出版社',TO_DATE('2002-07-01','YYYY-MM-DD'),35);

INSERTINTOBOOKVALUES('100003','Oracle9i開發(fā)指南:PL/SQL程序設(shè)計','JoanCasteel','電子工業(yè)出版社',TO_DATE('2004-04-03','YYYY-MM-DD'),49);

INSERTINTOBOOKVALUES('100004','數(shù)據(jù)庫原理輔助與提高','盛定宇','電子工業(yè)出版社',TO_DATE('2004-03-01','YYYY-MM-DD'),34);

INSERTINTOBOOKVALUES('100005','Oracle9i中文版實用培訓教程','趙伯山','電子工業(yè)出版社',TO_DATE('2002-01-01','YYYY-MM-DD'),21);

INSERTINTOBOOKVALUES('100006','Oracle8實用教程','翁正科等','電子工業(yè)出版社',TO_DATE('2003-07-08','YYYY-MM-DD'),38);INSERTINTOREADERVALUES('200001','張三');

INSERTINTOREADERVALUES('200002','李鳳');

INSERTINTOREADERVALUES('200003','孟欣');

INSERTINTOREADERVALUES('200004','謝非');

INSERTINTOREADERVALUES('200005','劉英');INSERTINTOBORROWVALUES('100001','200001',TO_DATE('2004-08-1010:06:14','YYYY-MM-DDHH:MI:SS'));

INSERTINTOBORROWVALUES('100002','200002',TO_DATE('2004-08-1010:06:27','YYYY-MM-DDHH:MI:SS'));

INSERTINTOBORROWVALUES('100003','200003',TO_DATE('2004-08-1010:06:36','YYYY-MM-DDHH:MI:SS'));

INSERTINTOBORROWVALUES('100004','200004',TO_DATE('2004-08-1010:06:48','YYYY-MM-DDHH:MI:SS'));

INSERTINTOBORROWVALUES('100005','200005',TO_DATE('2004-08-1010:06:58','YYYY-MM-DDHH:MI:SS'));〔3〕INSERTINTOBOOKVALUES('10000007','Java網(wǎng)絡(luò)編成','李程等','電子工業(yè)出版社',TO_DATE('2000-08-01','YYYY-MM-DD'),35);

〔4〕UPDATEBOOKSETPRICE=29WHERENO='100007';

〔5〕DELETEFROMBOOKWHERENO='10000007'第8章數(shù)據(jù)查詢1.實訓題查詢100號部門的所有員工信息。Selsect*fromemployeeswheredepartment_id=100查詢所有職位編號為“SA_MAN〞的員工的員工號、員工名和部門號。Selectemployee_id,first_name,last_name,department_idfromemployeeswherejob_id=‘SA_MAN’查詢每個員工的員工號、工資、獎金以及工資與獎金的和。Selectemployee_id,salary,commission_pct,salary*(1+nvl(commission_pct,0)fromemployees查詢40號部門中職位編號為“AD_ASST〞和20號部門中職位編號為“SA_REP〞的員工的信息。 Select*fromemployeeswheredepartment_id=40andjob_id=’AD_ASST’ORdepartment_id=20andjob_id=’SA_REP’;查詢所有職位名稱不是“StockManager〞和“PurchasingManager〞,且工資大于或等于2000的員工的詳細信息。Select*fromemployeeswherejob_idnotin(’StockManager’,’PurchasingManager’)andsalary>=2000查詢有獎金的員工的不同職位編號和名稱。Selectdistinctjob_id,job_titlefromjobswherejob_idin(selectjob_idfromemployeeswherejob_idisnotnull)查詢沒有獎金或獎金低于100元的員工信息。Select*fromemployeeswheresalary*commission_pct<100orcommissionisNULL查詢員工名〔first_name〕中不包含字母“S〞的員工。Selectfirst_namefromemployeeswherefirst_namenotlike‘%S%’查詢員工的姓名和入職日期,并按入職日期從先到后進行排序。Selectfirst_name,last_name,hire_datefromemployeesorderbyhire_date;查詢所有員工的姓名及其直接上級的姓名。Selecta.first_name,b.first_namefromemployeesajoinemployeesbonb.employee_id=a.manage_id查詢?nèi)肼毴掌谠缬谄渲苯由霞夘I(lǐng)導的所有員工信息。select*fromemployeesawherehire_date<(selecthire_datefromemployeesbb.employee_id=a.manage_id)查詢各個部門號、部門名稱、部門所在地以及部門領(lǐng)導的姓名。Selectd.department_id,d.department_name,d.location,e.first_namefromdepartmentsdjoinemployeeseond.manager_id=e.employee_id查詢所有部門及其員工信息,包括那些沒有員工的部門。Selectdepartment_name,first_namefromdepartmentsdleftjoinemployeeseond.deparment_id=e.department_id查詢所有員工及其部門信息,包括那些還不屬于任何部門的員工。Selecte.first_name,d.department_nameFromemployeesleftjoindepartmentsone.department_id=d.department_id;查詢所有員工的員工號、員工名、部門名稱、職位名稱、工資和獎金。Selecte.employee_id,e.first_name,d.department_name,j.job_title,e.salary,e.salary*emission_pct獎金Fromdepartmentsdjoinemployeeseond.department_id=e.department_idJoinjobsjonj.job_id=e.job_id;查詢至少有一個員工的部門信息。select*fromdepartmentsdwhereexists(select1fromemployeeswheredepartment_id=d.department_id)查詢工資比100號員工工資高的所有員工信息。Select*fromemployeeswheresalary>(selectsalaryfromemployeeswhereemployee_id=100);查詢工資高于公司平均工資的所有員工信息。Select*fromemployeeswheresalary>(selectavg(salary)fromemployees)查詢各個部門中不同職位的最高工資。Selectjob_id,max(salary)fromemployeesgroupbyjob_id查詢各個部門的人數(shù)及平均工資Selectdepartment_id,count(*),avg(salary)fromemployeesgroupbydepartment_id;統(tǒng)計各個職位的員工人數(shù)與平均工資。Selectjob_id,count(employee_id),avg(salary)fromemployeesgroupbyjob_id;統(tǒng)計每個部門中各職位的人數(shù)與平均工資。Selectdepartment_id,job_id,count(*),avg(salary)fromemployeesgroupbydepartment_id,job_id;查詢最低工資大于5000元的各種工作。Selectjob_id,job_titlefromjobswherejob_idin(Selectjob_idfromemployeesgroupbyjob_idhavingmin(salary)>5000);查詢平均工資低于6000元的部門及其員工信息。Selecte.*,d.*fromemployeesejoindepartmentsdone.department_id=d.department_idanddepartment_idin(selectdepartment_Idfromemployeesgroupbyemployee_idhavingavg(salary)<6000);查詢在“Sales〞部門工作的員工的姓名信息。Select*fromemployeewheredepartment_idin(selectdepartment_dfromdepartmentswheredepartment_name=’Sales’)查詢與140號員工從事相同工作的所有員工信息。Select*fromemployeeswherejob_idin(selectjob_idfromemployeeswhereemployee_id=140);查詢工資高于30號部門中所有員工的工資的員工姓名和工資。Selectfirst_name,last_name,salaryfromemployeeswheresalary>(selectmax(salary)fromemployeesdeparment_id=30);查詢每個部門中的員工數(shù)量、平均工資和平均工作年限。Selectcount(*),avg(salary),avg(round((sysdate-hire_date)/365))fromemployeesgroupbydepartment_id查詢工資為某個部門平均工資的員工的信息。Select*fromemployeeswheresalsryin(selectavg(Salary)fromemployeesgroupbydepartment_id)查詢工資高于本部門平均工資的員工的信息。Select*fromemployeese1wheresalary>(selectavg(salary)fromemployeese2wheree2.department_id=e1.department_id)查詢工資高于本部門平均工資的員工的信息及其部門的平均工資。Selecte.*,avgsalFromemployeesejoin(selectdepartment_id,avg(salary)avgsalfromemployeesgroupbydepartment_id)dOne.department_id=d.department_idAnde.salary>d.avgsal查詢工資高于50號部門某個員工工資的員工的信息。Select*fromemployeeswheresalary>any(selectsalaryfromemployeeswheredepartment_id=50):查詢工資、獎金與10號部門某員工工資、獎金都相同的員工的信息。Select*fromemployeeswhere(salary,nvl(commission_pct))in(Selectsalary,nvl(commission_pct)fromemployeeswheredepartment_id=10)查詢部門人數(shù)大于10的部門的員工信息。Select*fromemployeeswheredepartment_idin(selectdepartment_idfromemployeesgroupbydepartment_idhavingcount(*)>10);查詢所有員工工資都大于10000元的部門的信息Select*fromdepartmentwheredepartment_idin(selectdepartment_idfromemployeesgroupbydepartment_idhavingmin(salary)>10000)查詢所有員工工資都大于5000元的部門的信息及其員工信息。Selecte.*,d.*FromemployeesejoindepartmentsdOne.department_id=d.department_idWheredepartment_idin(Selectdepartment_idfromemployeesgroupbydepartment_idhavingmin(salary)>5000))查詢所有員工工資都在4000元~8000元之間的部門的信息。Select*fromdepartmentswheredepartment_idin(Selectdepartment_idfromemployeesgroupbydepartment_idhavingmin(salary)>=4000andmax(salary)<=8000)查詢?nèi)藬?shù)最多的部門信息。Select*fromdepartment_idwheredepartment_idin(Selectdepartment_idfromemployeesgroupbydepartment_idhavingCount(*)>=all(selectcount(*)fromemployeesgroupbydepartment_id))查詢30號部門中工資排序前3名的員工信息。Select*fromemployeewheredepartment_id=30andsalaryisnotnullandrownum<=3orderbysalarydesc查詢所有員工中工資排序在5~10名之間的員工信息。Select*from(Selectrownumrn,employee_id,salaryfrom(Selectemployee_id,salaryfromemployeeswheresalaryisnotnullorderbysalarydesc)e1)e2Wherernbetween5and10將各部門員工的工資修改為該員工所在部門平均工資加1000。updateemployeesesetsalary=(selectavg(Salary)fromemployeeswheredepartment_id=e.department_id)+1000;查詢各月倒數(shù)第2天入職的員工信息。Select*fromemployeeswherehire_date=last(hire_date)-1’查詢工齡大于或等于10年的員工信息。select*fromhr.employeeswhere(sysdate-hire_date)/365>=10;查詢員工信息,要求以首字母大寫的方式顯示所有員工姓〔last_name〕和員工名〔first_name〕。 selectinitcap(first_name),initcap(last_name)fromhr.employees;查詢員工名〔first_name〕正好為6個字符的員工的信息。select*fromhr.employeeswherelength(first_name)=6;查詢員工名〔first_name〕的第2個字母為“M〞的員工信息。selectfirst_namefromhr.employeeswherefirst_namelike'_M%';查詢所有員工名〔first_name〕,如果包含字母“s〞,那么用“S〞替換。selectreplace(first_name,'S','s')fromhr.employees;查詢在2月份入職的所有員工信息。Select*fromemployeeswhereextract(mmfromhire_date)=2;2.選擇題BBDAACEBDBCDCBDCBDAC第9章PL/SQL語言根底1.實訓題〔1〕declare

cursorc_empisselect*fromemployees;

begin

forv_empinc_emploop

dbms_output.put_line(v_emp.first_name||''||v_emp.last_name||''||

v_emp.employee_id||''||v_emp.salary||''||v_emp.department_id);

endloop;

end;〔2〕declare

v_avgsalemployees.salary%type;

begin

forv_empin(select*fromemployees)loop

selectavg(salary)intov_avgsalfromemployees

wheredepartment_id=v_emp.department_id;

ifv_emp.salary>v_avgsalthen

dbms_output.put_line(v_emp.first_name||''||v_emp.last_name||''||

v_emp.employee_id||''||v_emp.salary||''||v_emp.department_id);

endif;

endloop;

end;

〔3〕declare

cursorc_empis

selecte.employee_ideid,e.last_nameename,

e.department_idedid,m.employee_idmid,m.last_namemname

fromemployeesejoinemployeesm

one.manager_id=m.employee_id;

v_empc_emp%rowtype;

begin

openc_emp;

loop

fetchc_empintov_emp;

exitwhenc_emp%notfound;

dbms_output.put_line(v_emp.eid||''||v_emp.ename||''||

v_emp.edid||''||v_emp.mid||''||v_emp.mname);

endloop;

closec_emp;

end;

〔4〕declare

v_empemployees%rowtype;

begin

select*intov_empfromemployeeswherelast_name='Smith';

dbms_output.put_line(v_emp.employee_id||''||

v_emp.first_name||''||v_emp.last_name||''||

v_emp.salary||''||v_emp.department_id);

exception

whenno_data_foundthen

insertintoemployees(employee_id,last_name,salary,email,hire_date,

job_id,department_id)

values(2023,'Smith',7500,'smith@',

to_date('2000-10-5','yyyy-mm-dd'),'AD_VP',50);

whentoo_many_rowsthen

forv_empin(select*fromemployeeswherelast_name='Smith')loop

dbms_output.put_line(v_emp.employee_id||''||

v_emp.first_name||''||v_emp.last_name||''||

v_emp.salary||''||v_emp.department_id);

endloop;

end;

〔5〕declare

cursorc_empisselect*fromemployees;

v_incrementemployees.salary%type;

begin

forv_empinc_emploop

case

whenv_emp.job_id='AD_PRES'ORv_emp.job_id='AD_VP'

ORv_emp.job_id='AD_ASST'THEN

v_increment:=1000;

whenv_emp.job_id='FI_MGR'ORv_emp.job_id='FI_ACCOUNT'THEN

v_increment:=800;

WHENv_emp.job_id='AC_MGR'ORv_emp.job_id='AC_ACCOUNT'THEN

v_increment:=700;

WHENv_emp.job_id='SA_MAN'ORv_emp.job_id='SA_REP'THEN

v_increment:=600;

WHENv_emp.job_id='PU_MAN'ORv_emp.job_id='PU_CLERK'THEN

v_increment:=500;

WHENv_emp.job_id='ST_MAN'ORv_emp.job_id='ST_CLERK'

ORv_emp.job_id='SH_CLERK'THENv_increment:=400;

WHENv_emp.job_id='IT_PROG'ORv_emp.job_id='MK_MAN'

ORv_emp.job_id='MK_REP'THENv_increment:=300;

ELSEv_increment:=200;

endcase;

updateemployeessetsalary=salary+v_increment

whereemployee_id=v_emp.employee_id;

endloop;

end;

〔6〕declare

v_lowsaljobs.min_salary%type;

v_highsaljobs.max_salary%type;

eexception;

begin

updateemployeessetsalary=8000whereemployee_id=201;

selectmin_salary,max_salaryintov_lowsal,v_highsal

fromjobswherejob_id=(selectjob_idfromemployeeswhere

employee_id=201);

if8000notbetweenv_lowsalandv_highsalthen

raisee;

endif;

exception

whenethen

raise_application_error(-20001,'beyondlimit');

rollback;

end;第10章PL/SQL程序設(shè)計〔1〕創(chuàng)立一個存儲過程,以員工號為參數(shù),輸出該員工的工資。createorreplaceprocedurepro_showsal(p_empnoemployees.employee_id%type)asv_salemployees.salary%type;beginselectsalaryintov_salfromemployeeswhereemployee_id=p_empno;dbms_output.put_line(v_sal);exceptionwhenno_data_foundthendbms_output.put_line('thereisnotsuchanemployees');end;beginpro_showsal(100);end;〔2〕創(chuàng)立一個存儲過程,以員工號為參數(shù),修改該員工的工資。假設(shè)該員工屬于10號部門,那么工資增加140元;假設(shè)屬于20號部門,那么工資增加200元;假設(shè)屬于30號部門,那么工資增加250元;假設(shè)屬于其他部門,那么工資增長300元。createorreplaceprocedurepro_updatesal(p_empnoemployees.employee_id%type)asv_deptnoemployees.department_id%type;v_incnumber;beginselectdepartment_idintov_deptnofromemployeeswhereemployee_id=p_empno;casev_deptnowhen10thenv_inc:=140;when20thenv_inc:=200;when30thenv_inc:=250;elsev_inc:=300;endcase;updateemployeessetsalary=salary+v_incwhereemployee_id=p_empno;exceptionwhenno_data_foundthendbms_output.put_line('thereisnotsuchanemployees');end;〔3〕創(chuàng)立一個函數(shù),以員工號為參數(shù),返回該員工的工資。createorreplacefunctionfunc_retsal(p_empnoemployees.employee_id%type)returnemployees.salary%typeasv_salemployees.salary%type;beginselectsalaryintov_salfromemployeeswhereemployee_id=p_empno;returnv_sal;exceptionwhenno_data_foundthendbms_output.put_line('thereisnotsuchanemployees');end;begindbms_output.put_line(func_retsal(100));end;創(chuàng)立一個函數(shù),以員工號為參數(shù),返回該員工所在部門的平均工資。createorreplacefunctionfunc_retavgsal(p_empnoemployees.employee_id%type)returnemployees.salary%typeasv_deptnoemployees.department_id%type;v_avgsalemployees.salary%type;beginselectdepartment_idintov_deptnofromemployeeswhereemployee_id=p_empno;selectavg(salary)intov_avgsalfromemployeeswheredepartment_id=v_deptno;returnv_avgsal;exceptionwhenno_data_foundthendbms_output.put_line('thereisnotsuchanemployees');end;〔5〕創(chuàng)立一個包,包中包含一個函數(shù)和一個過程。函數(shù)以部門號為參數(shù),返回該部門員工的最高工資;過程以部門號為參數(shù),輸出該部門中工資最高的員工名、員工號。createorreplacepackagepkg_empasfunctionfunc_ret_maxsal(p_deptnonumber)returnnumber;procedurepro_showemp(p_deptnonumber);end;createorreplacepackagebodypkg_empasfunctionfunc_ret_maxsal(p_deptnonumber)returnnumberasv_maxsalnumber;beginselectmax(salary)intov_maxsalfromemployeeswheredepartment_id=p_deptno;returnv_maxsal;end;procedurepro_showemp(p_deptnonumber)ascursorc_empisselect*fromemployeeswheredepartment_id=p_deptnoandsalary=func_ret_maxsal(p_deptno);beginforv_empinc_emploopdbms_output.put_line(v_emp.employee_id||''||v_emp.salary);endloop;end;end;〔6〕創(chuàng)立一個包,包中包含一個過程和一個游標。游標返回所有員工的信息;存儲過程實現(xiàn)每次輸出游標中的5條記錄。createorreplacepackagepkg_showemp

as

cursorc_empisselect*fromemployees;

procedureshow_fiveemp;

end;

createorreplacepackagebodypkg_showemp

as

procedureshow_fiveemp

as

v_empc_emp%rowtype;

begin

ifnotc_emp%isopenthen

openc_emp;

endif;

foriin1..20loop

fetchc_empintov_emp;

ifc_emp%notfoundthen

closec_emp;

exit;

endif;

dbms_output.put_line(v_emp.employee_id||''||

v_emp.first_name);

endloop;

end;

end;

begin

pkg_showemp.show_fiveemp;

end;〔7〕在employees表上創(chuàng)立一個觸發(fā)器,保證每天8:00~17:00之外的時間禁止對該表進行DML操作。createorreplacetriggertrg_empbeforeinsertorupdateordeleteonemployeesdeclarebeginifto_char(sysdate,'HH24:MI')notbetween'08:00'and'17:00'thenraise_application_error(-20000,'此時間內(nèi),不允許修改EMPLOYEES表');endif;end;〔8〕在employees表上創(chuàng)立一個觸發(fā)器,當插入、刪除或修改員工信息時,統(tǒng)計各個部門的人數(shù)及平均工資,并輸出。createorreplacetriggertrg_8

afterinsertorupdateordelete

onemployees

declare

cursorc_deptis

selectdepartment_id,avg(salary)avgsal,count(*)num

fromemployeesgroupbydepartment_id;

begin

forvinc_deptloop

dbms_output.put_line(v.department_id||''||

v.avgsal||''||v.num);

endloop;

end;〔9〕在employees表上創(chuàng)立一個觸發(fā)器,保證修改員工工資時,修改后的工資低于部門最高工資,同時高于部門的最低工資。createorreplacetriggertrg_after

afterupdateofsalary

onemployees

declare

v_maxsalemployees.salary%type;

v_minsalemployees.salary%type;

begin

selectmax(salary),min(salary)intov_maxsal,v_minsal

fromemployeeswheredepartment_id=pkg_10.v_deptno;

dbms_output.put_Line(v_minsal||''||v_maxsal||pkg_10.v_newsal);

ifpkg_10.v_newsal<v_minsalorpkg_10.v_newsal>v_maxsalthen

raise_application_error(-20001,'beyond');

dbms_output.put_Line('beyond');

endif;

end;〔10〕創(chuàng)立一個存儲過程,以一個整數(shù)為參數(shù),輸出工資最高的前幾個員工的信息。Createorreplaceprocedurepro_emp(pnumber)AsCursorc_empisSelect*fromemployeewheresalaryisnotnullandrownum<=porderbysalarydesc;BeginForvinv_EmploopDbms_output.put_line(v.employee_id||v.salary||v.department_id);Endloop;End;第11章PL/SQL高級應(yīng)用實訓題將employees表中所有員工信息存儲到一個嵌套表變量中,輸出該嵌套表中所有工資大于10000元的元素。DECLARECURSORall_empsISSELECT*FROMemployees;TYPEt_empnestedISTABLEOFemployees%ROWTYPE;v_empt_empnested:=t_empnested();indexvalueBINARY_INTEGER:=1;BEGINFORempINall_empsLOOPv_emp.extend;v_emp(indexvalue):=emp;indexvalue:=indexvalue+1;ENDLOOP;FORiIN1..v_emp.COUNTLOOPIFv_emp(i).salary>10000thenDBMS_OUTPUT.PUT_LINE(v_emp(i).employee_id||''||v_emp(i).first_name||’'||emp(i).last_name||''||v_emp(i).salary||''||v_emp(i).department_id);ENDIF;ENDLOOP;END;將departments表中所有部門信息存儲到一個可變數(shù)組變量中,輸出該可變數(shù)組中元素的個數(shù)及所有元素。DECLARECURSORc_deptISSELECT*FROMdepartments;TYPEt_deptISVARRAY(200)OFdepartments%ROWTYPE;v_deptt_dept:=t_dept();indexvalueBINARY_INTEGER:=1;BEGINFORvINc_deptLOOPv_dept.extend;v_dept(indexvalue):=v;indexvalue:=indexvalue+1;ENDLOOP;FORiIN1..v_dept.LASTLOOPDBMS_OUTPUT.PUT_LINE(v_dept(i).department_id||’‘||v_dept(i).department_name||’‘||v_dept(i).location);ENDLOOP;DBMS_OUTPUT.PUT_LINE(v_dept.count);END;創(chuàng)立一個存儲過程,以表名和一個列名為參數(shù),創(chuàng)立一個表。CREATEORREPLACEPROCEDUREcreate_table(p_tablenameVARCHAR2,p_col1VARCHAR2,p_col1_typeVARCHAR2)ASv_creationVARCHAR2(100);BEGINv_creation:='CREATETABLE'||p_tablename||'('||p_col1||''||p_col1_type||'primarykey';EXECUTEIMMEDIATEv_creation;END;創(chuàng)立一個存儲過程,將某個表的SELECT權(quán)限授予某個用戶。CREATEORREPLACEPROCEDUREgrant_priv(p_tablenameVARCHAR2,p_usernameVARCHAR2)ASsql_strvarchar2(100);BEGINsql_str:='GRANTSELECTON'||p_tablename||'TO'||p_username;EXECUTEIMMEDIATEsql_str;END;創(chuàng)立一個存儲過程,以員工號為參數(shù)刪除該員工。創(chuàng)立一個存儲過程,參數(shù)為員工號、列名、值,實現(xiàn)對特定員工信息中特定列信息的修改。CREATEORREPLACEPROCEDUREdyn_dml_test(p_colVARCHAR2,p_valueVARCHAR2,p_empnoNUMBER)ISv_strVARCHAR2(100);BEGINv_str:='UPDATEempSET'||p_col||'=:ph_valueWHEREemployee_id=:ph_empno';EXECUTE

溫馨提示

  • 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

提交評論