版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
Oracle數(shù)據(jù)庫實(shí)驗(yàn)指導(dǎo)段華斌編著計(jì)算機(jī)與通信工程系實(shí)驗(yàn)一實(shí)驗(yàn)名稱:數(shù)據(jù)庫的管理實(shí)驗(yàn)學(xué)時(shí):2實(shí)驗(yàn)?zāi)康模?)了解Oracle數(shù)據(jù)庫的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)。2)熟悉Oracle的命令操作環(huán)境SQL*PLUS。3)了解啟動(dòng)和關(guān)閉數(shù)據(jù)庫的不同方式及其優(yōu)缺陷。4)熟悉掌握各種啟動(dòng)、關(guān)閉方式。實(shí)驗(yàn)內(nèi)容及環(huán)節(jié):SQL*Plus的啟動(dòng)與關(guān)閉(一)SQL*Plus的啟動(dòng)當(dāng)?shù)卿浀讲僮飨到y(tǒng)后,有三種方法啟動(dòng)SQL*Plus。方法一:(1) 執(zhí)行“開始”→“程序”→“Oracle–OraDb11g_home1”→“應(yīng)用程序開發(fā)”→“SQLPlus”命令,打開SQLPlus窗口,顯示登錄界面。(2) 在登錄界面中將提醒輸入用戶名,根據(jù)提醒輸入相應(yīng)的用戶名和口令(例如system和admin)后按Enter鍵,SQL*Plus將連接到默認(rèn)數(shù)據(jù)庫。(3) 連接到數(shù)據(jù)庫之后,顯示SQL>提醒符,可以輸入相應(yīng)的SQL命令。方法二:(1) 執(zhí)行“開始”→“程序”→“附件”→“命令提醒符”,打開命令提醒符窗口。(2) 輸入命令:Sqlplus/nologConnectsys/口令assysdba方法三:(1) 執(zhí)行“開始”→“程序”→“附件”→“命令提醒符”,打開命令提醒符窗口。(2) 輸入命令:sqlplus用戶名/口令assysdba。(二)斷開與數(shù)據(jù)庫的連接SQL>DISCONNECT(三)退出SQL*PlusSQL>EXIT或:SQL>Quit(四)啟動(dòng)sqlplus,也許的故障ORA-12560導(dǎo)致ORA-12560:TNS:協(xié)議適配器錯(cuò)誤的問題的因素有三個(gè):(1)監(jiān)聽服務(wù)沒有起起來。windows平臺(tái)個(gè)一如下操作:開始---程序---管理工具---服務(wù),打開服務(wù)面板,啟動(dòng)TNSlistener服務(wù)。(2)databaseinstance沒有起起來。windows平臺(tái)如下操作:開始---程序---管理工具---服務(wù),打開服務(wù)面板,啟動(dòng)oracleserviceXXXX,XXXX就是你的databaseSID.(3)進(jìn)入sqlplus前,在commandline下輸入setoracle_sid=XXXX,XXXX就是你的databaseSID。使用shutdown命令關(guān)閉數(shù)據(jù)庫練習(xí)使用shutdown命令關(guān)閉數(shù)據(jù)庫實(shí)例,分別按以下方式啟動(dòng)數(shù)據(jù)庫實(shí)例。(1)正常關(guān)閉。等待當(dāng)前所有已連接的用戶斷開與數(shù)據(jù)庫的連接,然后關(guān)閉數(shù)據(jù)庫。正常關(guān)閉的語句如下:SHUTDOWNNORMAL(2)立即關(guān)閉?;赝嘶顒?dòng)事務(wù)解決并斷開所有已連接的用戶,然后關(guān)閉數(shù)據(jù)庫。立即關(guān)閉語句如下:SHUTDOWNIMMEDIATE(3)事務(wù)關(guān)閉:完畢事務(wù)解決后斷開所有已連接的用戶,然后關(guān)閉數(shù)據(jù)庫。事務(wù)解決關(guān)閉語句如下:SHUTDOWNTRANSACTIONAL(4)中止關(guān)閉:中止數(shù)據(jù)庫實(shí)例,立即關(guān)閉數(shù)據(jù)庫。中止關(guān)閉的語句如下:SHUTDOWNABORT使用startup命令啟動(dòng)數(shù)據(jù)庫練習(xí)使用STARTUP命令啟動(dòng)數(shù)據(jù)庫實(shí)例,分別按以下方式啟動(dòng)數(shù)據(jù)庫實(shí)例。(1)啟動(dòng)數(shù)據(jù)庫實(shí)例時(shí)不裝載數(shù)據(jù)庫。執(zhí)行此操作的命令如下:STARTUPNOMOUNT(2)啟動(dòng)數(shù)據(jù)庫實(shí)例,裝載數(shù)據(jù)庫,但不打開數(shù)據(jù)庫。通常在數(shù)據(jù)庫維護(hù)時(shí)執(zhí)行此操作,相應(yīng)的命令如下:STARTUPMOUNT(3)啟動(dòng)后限制對數(shù)據(jù)庫實(shí)例的訪問。執(zhí)行此操作的命令如下:STARTUPRESTRICT(4)強(qiáng)制實(shí)例啟動(dòng)。在碰到特殊異常的情況時(shí),可以強(qiáng)制啟動(dòng)實(shí)例。強(qiáng)制啟動(dòng)實(shí)例的語句如下:STARTUPFORCE4.改變數(shù)據(jù)庫的狀態(tài)(1)裝載數(shù)據(jù)庫實(shí)例。在執(zhí)行某些管理操作時(shí),數(shù)據(jù)庫必須啟動(dòng)、裝載一個(gè)實(shí)例,但此時(shí)數(shù)據(jù)庫處在關(guān)閉狀態(tài)。ALTERDATABASEMOUNT(2)打開已關(guān)閉的數(shù)據(jù)庫。ALTERDATABASEOPEN(3)以只讀方式打開數(shù)據(jù)庫。ALTERDATABASEOPENREADONLY思考題:1、在數(shù)據(jù)庫的nomount、mount、open三種模式下,分別打開數(shù)據(jù)庫的什么文獻(xiàn)?2、當(dāng)關(guān)閉數(shù)據(jù)庫時(shí)使用shutdown命令,好久沒有關(guān)閉,隨即將“命令提醒符”窗口關(guān)閉,之后重新“啟動(dòng)命令提醒符”并登錄SQL*PLUS,使用shutdownimmediate關(guān)閉數(shù)據(jù)庫出現(xiàn)如下問題如何解決?ORA-24324:未初始化服務(wù)句柄
ORA-24323:不允許此值
ORA-01090:正在關(guān)閉-不允許連接3、如何把數(shù)據(jù)庫從nomount狀態(tài)改為mount狀態(tài)?
實(shí)驗(yàn)二實(shí)驗(yàn)名稱:日記文獻(xiàn)的管理實(shí)驗(yàn)學(xué)時(shí):2實(shí)驗(yàn)?zāi)康模?)了解日記文獻(xiàn)的作用。2)了解管理重做日記文獻(xiàn)的準(zhǔn)則。3)掌握重做日記文獻(xiàn)組及成員的添加、清除、刪除等操作方法。實(shí)驗(yàn)內(nèi)容及環(huán)節(jié):重做日記文獻(xiàn)對于Oracle數(shù)據(jù)庫來說是至關(guān)重要的,Oracle數(shù)據(jù)庫的變化,都會(huì)生成相應(yīng)的重做日記,這些日記被記錄在重做日記文獻(xiàn)中。重做日記文獻(xiàn)的查看(1)查看數(shù)據(jù)庫各組聯(lián)機(jī)重做日記文獻(xiàn)的日記序列號:SQL>ARCHIVELOGLIST;SQL>SELECTGROUP#,SEQUENCE#FROMV$LOG;(2)查看日記文獻(xiàn)組的狀態(tài):SQL>SELECTGROUP#,STATUSFROMV$LOG;(3)查看重做日記組及其成員的基本信息:SQL>SELECTGROUP#,STATUS,MEMBERFROMV$LOGFILE;添加重做日記文獻(xiàn)組SQL>ALTERDATABASEADDLOGFILE2GROUP4('E:\REDO04_1.LOG')3SIZE10M;添加重做日記文獻(xiàn)組的成員方法一:SQL>ALTERDATABASEADDLOGFILEMEMBER2'E:\REDO04_2.LOG'3TOGROUP4;方法二:假如不知道組編號,可以通過下述操作向組中其他成員的名稱來添加新的成員:SQL>ALTERDATABASEADDLOGFILEMEMBER2'E:\REDO04_3.LOG'3TO4(‘E:\REDO04_1.log’,’'E:\REDO04_2.log’);查詢v$log可以看到添加完畢后的結(jié)果:SQL>SELECTGROUP#,MEMBERS,STATUS,FIRST_TIMEFROMV$LOG;刪除重做日記文獻(xiàn)組成員:SQL>ALTERDATABASEDROPLOGFILEMEMBER'E:\REDO04_3.LOG';刪除重做日記文獻(xiàn)組:SQL>ALTERDATABASEDROPLOGFILEGROUP4;也許的錯(cuò)誤信息:Ora-01623:日記10是實(shí)例orcl的當(dāng)前日記。解決方法:SQL>altersystemswitchlogfile;SQL>select*fromv$log;
交替日記文獻(xiàn)組,假如多次切換后想要?jiǎng)h除的重做日記組狀態(tài)依舊是active的時(shí)候可以重啟動(dòng)一下數(shù)據(jù)庫。清除重做日記文獻(xiàn)組:SQL>ALTERDATABASECLEARLOGFILEGROUP3;改變數(shù)據(jù)庫的歸檔模式:修改初始化參數(shù),指定歸檔位置和歸檔日記文獻(xiàn)的命名方法。SQL>ALTERSYSTEM2SETLOG_ARCHIVE_DEST='D:\ORACLE\ORADATA\ARCHIVE';SQL>ALTERSYSTEM2SETLOG_ARCHIVE_DUPLEX_DEST='E:\ORACLE\ARCHIVE';SQL>ALTERSYSTEM2SETLOG_ARCHIVE_FORMAT='%R_%T_%S.ARC'SCOPE=SPFILE;關(guān)閉數(shù)據(jù)庫實(shí)例SHUTDOWNIMMEDIATE;Startupmount;Alterdatabasearchivelog;Alterdatabaseopen;強(qiáng)制進(jìn)行日記切換,以檢查日記文獻(xiàn)能否對的歸檔。SQL>ALTERSYSTEMSWITCHLOGFILE;在資源管理器中查看指定歸檔位置下的歸檔日記文獻(xiàn)。查看數(shù)據(jù)庫的當(dāng)前模式:SQL>SELECTNAME,LOG_MODEFROMV$DATABASE;查看數(shù)據(jù)庫的歸檔進(jìn)程信息:SQL>SELECT*FROMV$ARCHIVE_PROCESSES;查詢數(shù)據(jù)庫的歸檔日記文獻(xiàn)名稱、重做日記序列號以及每次歸檔的完畢時(shí)間等。SQL>SELECTNAME,SEQUENCE#,COMPLETION_TIMEFROMV$ARCHIVED_LOG;思考題:移動(dòng)、重命名重做日記文獻(xiàn)成員的環(huán)節(jié)如下,請完畢各環(huán)節(jié)的命令代碼。(1)關(guān)閉數(shù)據(jù)庫。(2)將重做日記文獻(xiàn)E:\REDO04_3.LOG移動(dòng)或復(fù)制到D盤,并重命名為REDO04_03.LOG。(3)以MOUNT狀態(tài)打開數(shù)據(jù)庫。(4)重命名數(shù)據(jù)庫的重做日記文獻(xiàn)。(5)打開數(shù)據(jù)庫。(6)查看重做日記文獻(xiàn)信息。2、在實(shí)驗(yàn)內(nèi)容中添加重做日記文獻(xiàn)組group4時(shí),是否可以將group4改為group1?改為group6呢?請分別說明因素。3、當(dāng)重做日記文獻(xiàn)組被清除后,該組還可以繼續(xù)使用嗎?為什么?
實(shí)驗(yàn)三實(shí)驗(yàn)名稱:角色和用戶管理實(shí)驗(yàn)學(xué)時(shí):2實(shí)驗(yàn)?zāi)康模?)了解數(shù)據(jù)庫用戶。2)熟悉創(chuàng)建、更改、刪除、查看用戶的方法。3)了解數(shù)據(jù)庫的不同權(quán)限。4)掌握權(quán)限的授予和回收的方法。5)了解權(quán)限、角色的不同點(diǎn)以及它們之間的關(guān)系。6)純熟掌握對角色的管理。實(shí)驗(yàn)內(nèi)容及環(huán)節(jié):在Oracle中,只有具有一定權(quán)限的用戶才干對數(shù)據(jù)庫進(jìn)行操作。在安裝Oracle時(shí),數(shù)據(jù)庫自身會(huì)自動(dòng)創(chuàng)建一些用戶或帳戶,如SYS、SYSTEM、SYSMAN、DBSNMP等,這些預(yù)定義的用戶具有特殊的權(quán)限能管理數(shù)據(jù)庫。用SYS用戶來實(shí)現(xiàn)創(chuàng)建、更改、刪除用戶等操作。創(chuàng)建用戶CREATEUSER語句在數(shù)據(jù)庫中創(chuàng)建新用戶,語法如下:CREATEUSER<用戶名>IDENTIFIED{BY<口令>|EXTERNALLY|GLOBALLY}[PASSWORDEXPIRE][ACCOUNTLOCK|UNLOCK][TEMPORARYTABLESPACE<臨時(shí)表空間>];[DEFAULTTABLESPACE<默認(rèn)表空間>][QUOTAquota[K|M]|UNLIMITEDON表空間][PROFILE概要文獻(xiàn)]例1:創(chuàng)建管理用戶USERMAN。CREATEUSERUSERMANIDENTIFIEDBYUSERMAN;更改用戶ALTERUSER語句也可以修改用戶信息。修改密碼密碼。例2:將用戶USERMAN的密碼修改為NewPassword:ALTERUSERUSERMANIDENTIFIEDBYNewPassword;(2)PASSWORDEXPIRE關(guān)鍵詞設(shè)立密碼過期。例3:設(shè)立用戶USERMAN的密碼立即過期,它在下一次登錄時(shí)必須修改密碼:ALTERUSERUSERMANPASSWORDEXPIRE;(3)ACCOUNTLOCK關(guān)鍵詞鎖定用戶。例4:鎖定用戶USERMAN,使其無法登錄到數(shù)據(jù)庫:ALTERUSERUSERMANACCOUNTLOCK;(4)ACCOUNTUNLOCK關(guān)鍵詞解鎖用戶。例5:解除對用戶USERMAN的鎖定:ALTERUSERUSERMANACCOUNTUNLOCK;刪除用戶DROPUSER語句也可以刪除指定的用戶。DROPUSER用戶名[CASCADE];查詢用戶例5:SELECTusername,profile,account_status,createdFROMdba_usersWHEREusername=’ty’;不同用戶可以對數(shù)據(jù)庫進(jìn)行不同的操作,所有對數(shù)據(jù)庫可以進(jìn)行操作的用戶都必須具有一定的操作權(quán)限,而不同用戶權(quán)限不全相同。為不同用戶賦予不同權(quán)限的目的是為了保證數(shù)據(jù)庫的安全,以下關(guān)于用戶賦予、回收權(quán)限的操作。授予系統(tǒng)權(quán)限使用GRANT語句,其語法如下:GRANTsystem_privilege[,...]TO{user_name[,...]|role_name[,...]|PUBLIC}[WITHADMINOPTION];例6:對于用戶USERMAN授予SYSDBA角色:GRANTSYSDBATOUSERMAN;授予對象權(quán)限使用GRANT語句,其語法如下:GRANTobject_privilege[,...]|ALL[PRIVILEGES]ON<schema.>object_nameTO{user_name[,...]|role_name[,...]|PUBLIC}[WITHGRANTOPTION];Oracle數(shù)據(jù)庫的權(quán)限太多,對權(quán)限的管理工作太復(fù)雜,使用角色可以很好的解決這個(gè)問題。角色是權(quán)限的集合,以下關(guān)于角色的管理。創(chuàng)建角色創(chuàng)建角色的語法如下:Createrole角色名[notidentified|identified{by口令|externally|globally}];例7:創(chuàng)建一個(gè)角色sr_admin,還用數(shù)據(jù)庫口令認(rèn)證方式。createrolesr_adminidentifiedbyadmin;給角色授權(quán)給角色授權(quán)的語法如下:Grant{All|對象權(quán)限1[,對象權(quán)限2…]}[列1[,列2]…]On{[模式名.]對象名|directory目錄名}to角色[withgrantoption];例8:grantcreatesessiontosr_admin;刪除角色Droprole刪除角色格式:Droprole角色;思考題:完畢如下操作的命令代碼:以sys用戶登陸sqlplus.
sqlplussys/123assysdba創(chuàng)建角色role1。
Createrolerole13、為角色role1授予createsession、resource權(quán)限。
grantcreatesessiontorole1; grantresourcetorole1;創(chuàng)建用戶,指定密碼、表空間。用戶名命名以本人姓名的拼音首字母縮寫+‘_’+學(xué)號最后兩位。
Createuserty_06
identifiedby123
defaulttablespaceusers
temporarytablespacetemp;5、修改用戶密碼。
alteruserty06identifiedby123;6、為用戶授予系統(tǒng)權(quán)限UNLIMITEDTABLESPACE。
grantUNLIMITEDTABLESPACEtoty06;7、為用戶指定角色role1。
grantrole1toty06;8、收回用戶的UNLIMITEDTABLESPACE權(quán)限。
revokeUNLIMITEDTABLESPACEfromty06;9、鎖定用戶。10、解鎖用戶。12、刪除用戶。13、刪除角色role1。14、忘掉SYS用戶的解決方法。Sqlplus/assysdbaAlterusersysidentifiedby123;Commit;Connectsys/123assysdba
實(shí)驗(yàn)4實(shí)驗(yàn)名稱:表的管理實(shí)驗(yàn)學(xué)時(shí):4實(shí)驗(yàn)?zāi)康模?)了解Oracle表和視圖的概念。2)純熟掌握使用SQL語句創(chuàng)建表。3)學(xué)習(xí)使用SELECT語句查詢數(shù)據(jù)。實(shí)驗(yàn)內(nèi)容及環(huán)節(jié):創(chuàng)建表CREATETABLE語句的基本使用方法如下所示:CREATETABLE[<schema>.]<tablename>(<column_name1><datatype>[DEFAULTexpr][CONSTRAINTconstraint_nameconstraint_def][,<column_name2><datatype>[DEFAULTexpr][CONSTRAINTconstraint_nameconstraint_def],…][CONSTRAINTconstraint_nameconstraint_def]][TABLESPACE表空間名][PCTFREEn][PCTUSEDn][INITRANSn][STORAGE(storage)])例1、創(chuàng)建表Users,SQL語句如下:CREATETABLEdhb.Users1(UserId NumberPrimaryKey,UserName Varchar2(40),UserType Number(1),UserPwd Varchar2(40));修改表添加列語法形式如下:ALTERTABLE[schema.]table_nameADDnew_columndata_type[dafaultexpr][CONSTRAINTconstraint_nameconstraint_def][,<new_column><datatype>[DEFAULTexpr][CONSTRAINTconstraint_nameconstraint_def],…];例2、在表Users中添加一個(gè)列tmpcol:SQL>ALTERTABLEUsersADD(tmpcolNUMBER(5,2));插入數(shù)據(jù)INSERT語句的基本使用方法如下所示:INSERTINTO<表名>(列名1,列名2,…,列名n)VALUES(值1,值2,…,值n);例3、向表Users中插入數(shù)據(jù)INSERTINTOUsers(UserId,UserName,UserType,UserPwd)VALUES(1,'Admin',1,'Admin');COMMIT;修改數(shù)據(jù)UPDATE語句的基本使用方法如下所示:UPDATE<表名>SET列名1=值1,列名2=值2,…,列名n=值nWHERE<更新條件表達(dá)式>例4、將用戶Admin的密碼修改為111111:UPDATEUsersSETUserPwd='111111'WHEREUserName='Admin';COMMITWORK;刪除數(shù)據(jù)DELETE命令刪除表中的數(shù)據(jù):DELETE<表名>WHERE<刪除條件表達(dá)式>例5、刪除表Users中列UserName等于空('')的數(shù)據(jù):DELETEFROMUsersWHEREUserName='';COMMITWORK;查詢數(shù)據(jù)(1)SELECT語句的基本語法結(jié)構(gòu)如下:SELECT子句[INTO子句]FROM子句[WHERE子句][GROUPBY子句][HAVING子句][ORDERBY子句]SELECT語句中各子句的說明:SELECT子句描述SELECT子句指定由查詢返回的列INTO子句創(chuàng)建新表并將結(jié)果行插入新表中FROM子句指定從其中檢索行的表WHERE子句指定查詢條件GROUPBY子句指定查詢結(jié)果的分組條件HAVING子句指定組或聚合的搜索條件ORDERBY子句指定結(jié)果集的排序UNION運(yùn)算符將兩個(gè)或更多查詢的結(jié)果組合為單個(gè)結(jié)果集,該結(jié)果集包含聯(lián)合查詢中的所有查詢的所有行COMPUTE子句生成合計(jì)作為附加的匯總列出現(xiàn)在結(jié)果集的最后。當(dāng)與BY一起使用時(shí),COMPUTE子句在結(jié)果集內(nèi)生成控制中斷和分類匯總??稍谕徊樵儍?nèi)指定COMPUTEBY和COMPUTEFOR子句FOR子句用于指定BROWSE或XML選項(xiàng)OPTION子句應(yīng)在整個(gè)查詢中使用指定的查詢提醒。每個(gè)查詢提醒只能指定一次,但允許指定多個(gè)查詢提醒。用該語句只也許指定一個(gè)OPTION子句。查詢提醒影響語句中的所有運(yùn)算符。假如主查詢中涉及UNION,則只有涉及UNION運(yùn)算符的最后一個(gè)查詢可以有OPTION子句。例6、在SELECT語句中查詢指定的列名COLEMP_NAMEFORMATA20COLSEXFORMATA10COLTITLEFORMATA10SELECTEmp_name,Sex,TitleFROMdhb.Employees;(2)使用ROWNUM(3)使用LIKE關(guān)鍵字實(shí)現(xiàn)模糊查詢Oracle的通配符及其含義%包含零個(gè)或多個(gè)任意字符的字符串_任意單個(gè)字符?任意單個(gè)字符#表達(dá)0——9的數(shù)字[]指定范圍或集合中的任意單個(gè)字符查詢所有身份證號中包含ddd的員工記錄例7、SELECTEMP_NAME,TITLE,IDCardFROMDHB.EmployeesWHEREIDCardLIKE'%ddd%';(3)在SELECT中使用DECODE函數(shù)DECODE函數(shù)語法如下:DECODE(<輸入值>,<值1>,<結(jié)果1>,[,<值2>,<結(jié)果2>…][,<默認(rèn)結(jié)果>])假如<輸入值>等于<值1>,則DECODE函數(shù)返回<結(jié)果1>;假如<輸入值>等于<值2>,則DECODE函數(shù)返回<結(jié)果2>,以此類推。假如參數(shù)列表中沒有與<輸入值>相等的值,則DECODE函數(shù)返回<默認(rèn)結(jié)果>例8、SELECTEmp_name,DECODE(Sex,'男','先生','女','女士','未知')ASSexFROMDHB.Employees;(4)在SELECT中使用CASE函數(shù)CASE函數(shù)還可以根據(jù)不同邏輯表達(dá)式是否成立來決定函數(shù)的返回值,語法如下:CASEWHEN<邏輯表達(dá)式1>THEN<結(jié)果1>[WHEN<邏輯表達(dá)式2>THEN<結(jié)果2>…][ELSE<默認(rèn)結(jié)果>]END例9:在Employees中,將員工工資分3個(gè)級別,工資小于等于3000的級別為低,工資大于3000且小于5000的級別為中,工資大于等于5000的級別為高。SELECTEmp_name,Wage,CASEWHENWage<=3000THEN'低'WHENWage>3000ANDWage<5000THEN'中'WHENWage>=5000THEN'高'ENDASGRADEFROMDHB.Employees;(5)保存查詢結(jié)果在CREATETABLE語句中使用SELECT子句可以將查詢結(jié)果集填充到新建的表中。新表的結(jié)構(gòu)由選擇列表中列的特性定義。語法如下:CREATETABLE<新表名>AS<SELECT查詢>例10:將辦公室的所有員工的姓名和職務(wù)信息保存到表Office中:CREATETABLEDHB.OfficeSELECTe.Emp_Name,e.TitleFROMDHB.Employeese,DHB.DepartmentsdWHEREe.Dep_id=d.Dep_IdANDd.Dep_Name='辦公室';思考題:1、創(chuàng)建用戶,指定密碼、表空間。用戶名命名以本人姓名的縮寫+_+學(xué)號后兩位命名。2、創(chuàng)建如下表,將表保存到自己的用戶方案中。學(xué)生表:student字段名稱字段類型約束snovarchar2(10)主鍵snamevarchar2(20)sagenumber(2)ssexvarchar2(5)CREATETABLEstudent(sno varchar2(10)PrimaryKey,sname varchar2(20),sage number(2),ssex varchar2(5));教師表:teachertnovarchar2(10)主鍵tnamevarchar2(20)CREATETABLEteacher(tno varchar2(10)PrimaryKey,tname varchar2(20));課程表:coursecnovarchar2(10)與tno聯(lián)合做主鍵cnamevarchar2(20)tnovarchar2(20)CREATETABLEcourse(cno varchar2(10),cname varchar2(20),tno varchar2(20),PrimaryKey(cno,tno));成績表:scsnovarchar2(10)與cno聯(lián)合做主鍵cnovarchar2(10)scorenumber(4,2)createtablesc(snovarchar2(10),cnovarchar2(10),scorenumber(4,2),primarykey(sno,cno));3\為各表輸入數(shù)據(jù)。insertintostudentvalues('s001','張三',23,'男');insertintostudentvalues('s002','李四',23,'男');insertintostudentvalues('s003','吳鵬',25,'男');insertintostudentvalues('s004','琴沁',20,'女');insertintostudentvalues('s005','王麗',20,'女');insertintostudentvalues('s006','李波',21,'男');insertintostudentvalues('s007','劉玉',21,'男');insertintostudentvalues('s008','蕭蓉',21,'女');insertintostudentvalues('s009','陳蕭曉',23,'女');insertintostudentvalues('s010','陳美',22,'女');commit;insertintoteachervalues('t001','劉陽');insertintoteachervalues('t002','諶燕');insertintoteachervalues('t003','胡明星');commit;insertintocoursevalues('c001','J2SE','t002');insertintocoursevalues('c002','JavaWeb','t002');insertintocoursevalues('c003','SSH','t001');insertintocoursevalues('c004','Oracle','t001');insertintocoursevalues('c005','SQLSERVER2023','t003');insertintocoursevalues('c006','C#','t003');insertintocoursevalues('c007','JavaScript','t002');insertintocoursevalues('c008','DIV+CSS','t001');insertintocoursevalues('c009','PHP','t003');insertintocoursevalues('c010','EJB3.0','t002');commit;insertintoscvalues('s001','c001',78.9);insertintoscvalues('s002','c001',80.9);insertintoscvalues('s003','c001',81.9);insertintoscvalues('s004','c001',60.9);insertintoscvalues('s001','c002',82.9);insertintoscvalues('s002','c002',72.9);insertintoscvalues('s003','c002',81.9);insertintoscvalues('s001','c003','59');commit;查詢每門課程被選修的學(xué)生數(shù)。
SELECTcno,count(sno)FROMscGROUPBYcnoOrderbycno;查詢出只選修了一門課程的所有學(xué)生的學(xué)號和姓名。SELECTsc.sno,student.snameFROMsc,student Wheresc.sno=student.snoGROUPBYsc.sno,student.snameHAVINGcount(cno)=1;6、查詢男生、女生人數(shù)。7、查詢姓“張”的學(xué)生名單。8、查詢同名同姓學(xué)生名單,并記錄同名人數(shù)。9、1981年出生的學(xué)生名單。10、查詢每門課程的平均成績,結(jié)果按平均成績升序排列,平均成績相同時(shí),按課程號降序排列。11、查詢平均成績大于85的所有學(xué)生的學(xué)號、姓名和平均成績。12、記錄每門課程的學(xué)生選修人數(shù)(超過10人的課程才記錄)。規(guī)定輸出課程號和選修人數(shù),查詢結(jié)果按人數(shù)降序排列,若人數(shù)相同,按課程號升序排列。13、查詢各科成績最高和最低的分:以如下形式顯示:課程ID,最高分,最低分。14、按各科平均成績從低到高和及格率的百分?jǐn)?shù)從高到低順序。15、記錄列印各科成績,各分?jǐn)?shù)段人數(shù):課程ID,課程名稱,[100-85],[85-70],[70-60],[<60]。
實(shí)驗(yàn)五實(shí)驗(yàn)名稱:PL/SQL編程實(shí)驗(yàn)學(xué)時(shí):4實(shí)驗(yàn)?zāi)康?純熟掌握PL/SQL程序設(shè)計(jì)的基本知識(shí)。純熟掌握PL/SQL中控制結(jié)構(gòu)的使用。具體涉及選擇結(jié)構(gòu)語句(IF語句和CASE語句),循環(huán)結(jié)構(gòu)(四種循環(huán)結(jié)構(gòu))。純熟使用PL/SQL中系統(tǒng)函數(shù)。掌握PL/SQL中異常解決語句的使用掌握PL/SQL中SELECT語句和DML語句的綜合運(yùn)用。實(shí)驗(yàn)內(nèi)容及環(huán)節(jié)1、條件語句IF的語法及使用IF<條件表達(dá)式>THEN<執(zhí)行語句>……<執(zhí)行語句n>[ELSIF<條件表達(dá)式>THEN<執(zhí)行語句>……<執(zhí)行語句n>……ELSE<執(zhí)行語句>]ENDIF;例1:聲明一個(gè)整型變量Num,使用IF語句判斷Num變量是正數(shù)、負(fù)數(shù)或0。SETServerOutputDECLARENumINTEGER:=-11;BEGINIFNum<0THENdbms_output.put_line('負(fù)數(shù)');ELSIFNum>0THENdbms_output.put_line('正數(shù)');ELSEdbms_output.put_line('0');ENDIF;END;2、分支語句CASE語法:CASE<變量>WHEN<表達(dá)式1>THEN值1WHEN<表達(dá)式2>THEN值2……WHEN<表達(dá)式n>THEN值nELSE值n+1END;例2、使用CASE語句根據(jù)給定的整數(shù)輸出相應(yīng)的星期值:SETServerOutputDECLAREvarDAYINTEGER:=3;ResultVARCHAR2(20);BEGINResult:=CASEvarDAYWHEN1THEN'星期一'WHEN2THEN'星期二'WHEN3THEN'星期三'WHEN4THEN'星期四'WHEN5THEN'星期五'WHEN6THEN'星期六'WHEN7THEN'星期七'ELSE'數(shù)據(jù)越界'END;dbms_output.put_line(Result);END;3、練習(xí)循環(huán)結(jié)構(gòu)語句的使用方法。(1)循環(huán)語句LOOP…EXIT…ENDLOOP<程序塊1>IF<條件表達(dá)式>THENEXITENDIF<程序塊2>ENDLOOP;例1、計(jì)算1到3的累加和。SETServerOutputDECLAREv_NumINTEGER:=1;v_SumINTEGER:=0;BEGINLOOPv_Sum:=v_Sum+v_Num;dbms_output.put_line(v_Num);IFv_Num=3THENEXIT;ENDIF;dbms_output.put_line('+');v_Num:=v_Num+1;ENDLOOP;dbms_output.put_line('=');dbms_output.put_line(v_Sum);END;(2)循環(huán)語句LOOP…EXITWHEN…ENDLOOP<程序塊1>EXITWHEN<條件表達(dá)式><程序塊2>ENDLOOP;例2、計(jì)算1到3的累加和。SETServerOutputDECLAREv_NumINTEGER:=1;v_SumINTEGER:=0;BEGINLOOPv_Sum:=v_Sum+v_Num;dbms_output.put_line(v_Num);EXITWHENv_Num=3;dbms_output.put_line('+');v_Num:=v_Num+1;ENDLOOP;dbms_output.put_line('=');dbms_output.put_line(v_Sum);END;(3)循環(huán)語句WHILE…LOOP…ENDLOOPWHILE<條件表達(dá)式>LOOP<程序塊>ENDLOOP;(4)循環(huán)語句FOR…IN…LOOP…ENDLOOPFOR<循環(huán)變量>IN<初始值>..<終止值>LOOP<程序塊>ENDLOOP;例3、計(jì)算1到3的累加和。SETServerOutputDECLAREv_NumINTEGER;v_SumINTEGER:=0;BEGINFORv_NumIN1..3LOOPv_Sum:=v_Sum+v_Num;dbms_output.put_line(v_Num);IFv_Num<3THENdbms_output.put_line('+');ENDIF;ENDLOOP;dbms_output.put_line('=');dbms_output.put_line(v_Sum);END;4、練習(xí)異常解決語句的使用方法。EXCEPTIONWHEN<異常情況名>THEN<異常解決代碼>WHEN<異常情況名>THEN<異常解決代碼>……WHENOTHERSTHEN<異常解決代碼>例1、SETSERVEROUTPUTON;DECLARExNUMBER;BEGINx:='a123';--向NUMBER類型的變量X中賦值字符串,導(dǎo)致異常EXCEPTIONWHENVALUE_ERRORTHENDBMS_OUTPUT.PUT_LINE('數(shù)據(jù)類型錯(cuò)誤');END;例2、SETSERVEROUTPUTON;DECLAREv_resultNUMBER(10):=0;BEGINv_result:=100/0;DBMS_OUTPUT.PUT_LINE('結(jié)果是:'||v_result);EXCEPTIONWHENZERO_DIVIDETHENDBMS_OUTPUT.PUT_LINE('除數(shù)是零!默認(rèn)用1替代除數(shù),結(jié)果是:'||100/1);END;思考題:編寫PL/SQL程序,使用LOOP…EXIT…END語句計(jì)算1—100之間所有偶數(shù)之和。創(chuàng)建表departments和表employees,并為兩張表輸入若干數(shù)據(jù)。表departments結(jié)構(gòu):字段名稱字段類型約束Dep_idnumber主鍵Dep_namevarchar2(20)表employees結(jié)構(gòu):字段名稱字段類型約束emp_idnumber主鍵emp_namevarchar2(20)sexvarchar2(20)titlevarchar2(20)wagenumberidcardvarchar2(12)dep_idnumber外鍵編寫PL/SQL程序,查詢5號員工工資,假如工資小于3000,則加200員工資,并提醒信息“5號員工工資已更新?!?,假如工資大于3000,則提醒信息“5號員工工資為XXX,已達(dá)成規(guī)定標(biāo)準(zhǔn)。”編寫PL/SQL程序,查詢1號員工的工資,使用CASE語句輸出其工資等級。工資小于等于3000,等級為“低”;工資大于3000,小于5000,等級為”中”;工資大于等于5000,等級為高;編寫PL/SQL程序,查詢的departments表中是否有部門號為“6”的記錄,假如沒有,插入新記錄部門號為6,部門名稱為“后勤部”。假如有,顯示查詢結(jié)果。
實(shí)驗(yàn)六實(shí)驗(yàn)名稱:使用游標(biāo)、存儲(chǔ)過程和觸發(fā)器實(shí)驗(yàn)學(xué)時(shí):2實(shí)驗(yàn)?zāi)康?了解游標(biāo)的概念和工作原理。了解存儲(chǔ)過程的分類和使用方法。了解觸發(fā)器的概念。學(xué)習(xí)編寫和執(zhí)行自定義過程。學(xué)習(xí)創(chuàng)建和使用觸發(fā)器。實(shí)驗(yàn)內(nèi)容及環(huán)節(jié)1、游標(biāo)的使用(一)使用顯式游標(biāo)(1)說明游標(biāo)。DECLARECURSOR<游標(biāo)名>[(<參數(shù)列表>)]IS<SELECT語句>;(2)打開游標(biāo)。OPEN<游標(biāo)名>[(<參數(shù)列表>)];(3)讀取數(shù)據(jù)。FETCH<游標(biāo)名>INTO<變量列表>;(4)關(guān)閉游標(biāo)。CLOSE<游標(biāo)名>;例1、使用游標(biāo)讀取1號部門的名稱。DECLARE--開始聲明部分varNameVARCHAR2(50);--聲明變量,用來保存游標(biāo)中的部門名稱--定義游標(biāo),varId為參數(shù),指定部門編號CURSORMyCur(varIdNUMBER)ISSELECTDep_NameFROMdhb.DepartmentsWHEREDep_id=varId;BEGIN--開始程序體OPENMyCur(1);--打開游標(biāo),參數(shù)為1,表達(dá)讀取部門編號為1的記錄FETCHMyCurINTOvarName;--讀取當(dāng)前游標(biāo)位置的數(shù)據(jù)CLOSEMyCur;--關(guān)閉游標(biāo)dbms_output.put_line('部門名稱:'||varName);--顯示讀取的數(shù)據(jù)END;--結(jié)束程序體(二)帶子查詢的游標(biāo)for循環(huán)的語法如下:FOR<記錄名>IN(SELECT子查詢)LOOP語句1;語句2;…語句n;ENDLOOP;例2、帶子查詢的游標(biāo)for循環(huán)例子:/*打開顯示模式*/SETServerOutputBEGIN--開始程序體FORvar_DeptRecordIN(SELECTDep_id,Dep_NameFROMdhb.Departments)LOOP/*顯示保存在記錄變量var_DeptRecord中的數(shù)據(jù)*/dbms_output.put_line('部門編號:'||var_DeptRecord.Dep_Id||',部門名稱:'||var_DeptRecord.Dep_Name);ENDLOOP;END;--結(jié)束程序體/2、過程的定義及使用CREATEPROCEDURE語句來創(chuàng)建過程的語法格式:CREATE[ORREPLACE]PROCEDURE<過程名>[<參數(shù)列表>]IS|AS[<局部變量聲明>]BEGIN<過程體>END[<過程名>];例3、創(chuàng)建過程GetDepAvgWage,此過程的功能是根據(jù)輸入的部門號獲取指定部門的平均工資。CREATEORREPLACEPROCEDUREDHB.GetDepAvgWage(v_DepIdINNUMBER,v_AvgWageOUTNUMBER)ASBEGINSELECTAVG(Wage)INTOv_AvgWageFROMDHB.EmployeesWHEREDep_Id=v_DepId;END;/執(zhí)行過程GetDepAvgWage,獲取1號部門的平均工資。--執(zhí)行在使用輸出參數(shù)時(shí),必須一方面定義參數(shù)的類型。SETServerOutputDECLAREAvgWageNUMBER:=0;BEGINDHB.GetDepAvgWage(1,AvgWage);dbms_output.put_line(AvgWage);END;/3、觸發(fā)器的創(chuàng)建及使用。CREATETRIGGER語句來創(chuàng)建觸發(fā)器:CREATE[ORREPLACE]TRIGGER<觸發(fā)器名>{BEFORE|AFTER}{INSERT|DELETE|UPDATE[OFcolumn[,column…]]}
[OR{INSERT|DELETE|UPDATE[OFcolumn[,column…]]}...]ON<表名>|<視圖名>[FOREACHROW][WHEN<條件表達(dá)式>]<PL/SQL程序體>|callprocedure_name例4、創(chuàng)建一個(gè)語句級DML觸發(fā)器。(1)一方面創(chuàng)建表Test和表LogTable(記錄對表Test的更新操作)CREATETABLEdhb.Test(id INTEGER,name VARCHAR2(50));CREATETABLEdhb.LogTable(log_date DATE,action VARCHAR2(50));(2)創(chuàng)建語句觸發(fā)器LogUpdateTriggerCREATEORREPLACETRIGGERdhb.LogUpdateTriggerAFTERINSERTORUPDATEORDELETEONdhb.TestDECLARElog_actionVARCHAR2(50);BEGINIFINSERTINGTHENlog_action:='Insert';ELSIFUPDATINGTHENlog_action:='Update';ELSIFDELETINGTHENlog_action:='Delete';ELSEDBMS_OUTPUT.PUT_LINE('..');ENDIF;INSERTINTOdhb.LogTable(log_date,action)VALUES(SYSDATE,log_action);END;/(3)在表Test上執(zhí)行插入、修改、刪除操作:INSERTINTOdhb.TestVALUES(1,'Insert');UPDATEdhb.TestSETname='Update';DELETEFROMdhb.TestWHEREid=1;COMMIT;(4)查看表LogTable的內(nèi)容:SELECT*FROMDHB.LogTable;例5、創(chuàng)建一個(gè)行級觸發(fā)器MyTrigger,它的作用是當(dāng)dhb.Departments中Dep_id列的值發(fā)生變化時(shí),自動(dòng)更新表Employees中的Dep_id列的值,從而保證數(shù)據(jù)完整性。CREATEORREPLACETRIGGERDHB.MyTriggerAFTERUPDATEONDHB.DepartmentsFOREACHROWBEGINUPDATEDHB.EmployeesSETDep_id=:new.Dep_idWHEREDep_id=:old.Dep_id;END;/驗(yàn)證觸發(fā)器的功能:UPDATEDHB.DepartmentsSETDep_id=200WHEREDep_id=1;Commit;SELECTEmp_name,Dep_idFROMDHB.Employees;思考題:創(chuàng)建游標(biāo)mycur,從表employees中讀取1號部門的員工姓名,職務(wù)。并輸出“員工姓名:XXX,職務(wù):XXX。”創(chuàng)建存儲(chǔ)過程GetGrade,查詢指定員工的工資,使用CASE語句輸出其工資等級。工資小于等于3000,等級為“低”;工資大于3000,小于5000,等級為”中”;工資大于等于5000,等級為高。并執(zhí)行該存儲(chǔ)過程。創(chuàng)建存儲(chǔ)過程UpdateWage,查詢指定員工的工資,假如工資小于3000,則加200工資,并提醒信息“XX號員工工資已更新?!保偃绻べY大于3000,則提醒信息“XX號員工工資為XXX,已達(dá)成規(guī)定標(biāo)準(zhǔn)?!眲?chuàng)建觸發(fā)器MyTrigger,它的作用是當(dāng)表departments中的記錄被刪除后,自動(dòng)刪除表employees中的相應(yīng)的員工記錄,從而保證數(shù)據(jù)的完整性。
實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱:表的管理實(shí)驗(yàn)課時(shí):4課時(shí)實(shí)驗(yàn)地點(diǎn):E座305實(shí)驗(yàn)時(shí)間:2023年5月6日星期二第十二周實(shí)驗(yàn)?zāi)康募耙?guī)定:了解Oracle表和視圖的概念。純熟掌握使用SQL語句創(chuàng)建表。學(xué)習(xí)使用SELECT語句查詢數(shù)據(jù)。實(shí)驗(yàn)環(huán)境:硬件設(shè)備:PC機(jī)一臺(tái)操作系統(tǒng):WindowsXP應(yīng)用工具:Oracle10g實(shí)驗(yàn)內(nèi)容:(算法、程序、環(huán)節(jié)和方法)創(chuàng)建用戶,指定密碼、表空間。用戶名命名以本人姓名的縮寫+_+學(xué)號后兩位命名。代碼如下:createuserty_06identifiedby123defaulttablespaceuserstemporarytablespacetemp;創(chuàng)建如下表,將表保存到自己的用戶方案中。代碼如下:createtablestudent(sno varchar2(10)PrimaryKey,sname varchar2(20),sage number(2),ssexvarchar2(5)); createtableteacher(tno varchar2(10)PrimaryKey,tname varchar2(20));createtablecourse(cno varchar2(10),cname varchar2(20),tno varchar2(20),PrimaryKey(cno,tno));createtablesc(snovarchar2(10),cnovarchar2(10),scorenumber(4,2),primarykey(sno,cno));為各表輸入數(shù)據(jù)。代碼如下:/*******初始化學(xué)生表的數(shù)據(jù)******/insertintostudentvalues('s001','張三',23,'男');insertintostudentvalues('s002','李四',23,'男');insertintostudentvalues('s003','吳鵬',25,'男');insertintostudentvalues('s004','琴沁',20,'女');insertintostudentvalues('s005','王麗',20,'女');insertintostudentvalues('s006','李波',21,'男');insertintostudentvalues('s007','劉玉',21,'男');insertintostudentvalues('s008','蕭蓉',21,'女');insertintostudentvalues('s009','陳蕭曉',23,'女');insertintostudentvalues('s010','陳美',22,'女');commit;/******************初始化教師表***********************/insertintoteachervalues('t001','劉陽');insertintoteachervalues('t002','諶燕');insertintoteachervalues('t003','胡明星');commit;/***************初始化課程表****************************/insertintocoursevalues('c001','J2SE','t002');insertintocoursevalues('c002','JavaWeb','t002');insertintocoursevalues('c003','SSH','t001');insertintocoursevalues('c004','Oracle','t001');insertintocoursevalues('c005','SQLSERVER2023','t003');insertintocoursevalues('c006','C#','t003');insertintocoursevalues('c007','JavaScript','t002');insertintocoursevalues('c008','DIV+CSS','t001');insertintocoursevalues('c009','PHP','t003');insertintocoursevalues('c010','EJB3.0','t002');commit;/***************初始化成績表***********************/insertintoscvalues('s001','c001',78.9);insertintoscvalues('s002','c001',80.9);insertintoscvalues('s003','c001',81.9);insertintoscvalues('s004','c001',60.9);insertintoscvalues('s001','c002',82.9);insertintoscvalues('s002','c002',72.9);insertintoscvalues('s003','c002',81.9);insertintoscvalues('s001','c003','59');commit;查詢每門課程被選修的學(xué)生數(shù)。代碼如下:SELECTcno,count(sno)FROMscGROUPBYcnoOrderbycno;查詢出只選修了一門課程的所有學(xué)生的學(xué)號和姓名。代碼如下:SELECTsc.sno,student.snameFROMsc,student Wheresc.sno=student.snoGROUPBYsc.sno,student.snameHAVINGcount(cno)=1;查詢男生、女生人數(shù)。代碼如下: SELECTssex,COUNT(SSEX)FROMSTUDENTGROUPBYSSEX;查詢姓“張”的學(xué)生名單。代碼如下: Selectsname Fromstudent Wheresnamelike’張%’;查詢同名同姓學(xué)生名單,并記錄同名人數(shù)。代碼如下:
selectsname,count(*)
fromstudent
groupbysnamehavingcount(*)>1;查詢1981年出生的學(xué)生名單。代碼如下:SelectsnameFromstudentwhereto_char(sysdate,'yyyy')-sage=1981;
查詢每門課程的平均成績,結(jié)果按平均成績升序排列,平均成績相同時(shí),按課程號降序排列。代碼如下:Selectcno,cname,(selectAvg(Score)Fromsc Wherecno=o)平均成績FromcourseOrderby平均成績,cnoDesc;查詢平均成績大于85的所有學(xué)生的學(xué)號、姓名和平均成績。代碼如下:selectst.sno,st.sname,avg(score)fromstudentstleftjoinsconsc.sno=st.snogroupbyst.sno,st.snamehavingavg(score)>85;記錄每門課程的學(xué)生選修人數(shù)(超過10人的課程才記錄)。規(guī)定輸出課程號和選修人數(shù),查詢結(jié)果按人數(shù)降序排列,若人數(shù)相同,按課程號升序排列。代碼如下:Selectdistinctcno,CountsnoFromscGroupbycnohavingcount(sno)>10Orderby2,cnodesc;查詢各科成績最高和最低的分:以如下形式顯示:課程ID,最高分,最低分。代碼如下:Selectcno,(SelectMax(Score)FromscWo=Co)最高分, (SelectMin(Score)FromscWo=o)最低分
FromCourse;按各科平均成績從低到高和及格率的百分?jǐn)?shù)從高到低順序。代碼如下:selectcno,avg(score),sum(casewhenscore>=60then1else0end)/count(*)*100||'%'as及格率fromscgroupbycnoorderbyabg(score),及格率desc;記錄各科分?jǐn)?shù)段人數(shù),請以下列格式顯示:課程ID,課程名稱,[100-85],[85-70],[70-60],[<60]。代碼如下:So,ame,sum(casewhenscorebetween85and100then1else0end)AS"[100-85]",sum(casewhenscorebetween70and85then1else0end)AS"[85-70]",sum(casewhenscorebetween60and70then1else0end)AS"[70-60]",sum(casewhenscore<60then1else0end)AS"[<60]" fromsc,coursec o=o,ame;小結(jié):通過這次上機(jī)實(shí)驗(yàn),我有以下收獲: 對表的創(chuàng)建有了更深層次的了解,知道如何創(chuàng)建表,對表的查詢等操作更加熟悉,此外,Oracle的相關(guān)查詢操作和SQL語句大同小異,很容易理解,對格式的規(guī)定更加精簡。 但是還上機(jī)操作過程中還存在以下幾個(gè)方面的局限性: 語句調(diào)試過程中出現(xiàn)了很多類似的錯(cuò)誤,select語句沒寫完就接了下個(gè)語句,符號經(jīng)常中英文混淆,基本函數(shù)不了解,比如調(diào)用系統(tǒng)時(shí)間年份的sysdate等,以后要加強(qiáng)對細(xì)節(jié)的注意,細(xì)節(jié)決定成敗。指導(dǎo)老師評議:成績:指導(dǎo)老師署名:年月日
實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)名稱:PL/SQL編程實(shí)驗(yàn)課時(shí):4課時(shí)實(shí)驗(yàn)地點(diǎn):實(shí)驗(yàn)時(shí)間:年月日星期第周實(shí)驗(yàn)?zāi)康募耙?guī)定:純熟掌握PL/SQL程序設(shè)計(jì)的基本知識(shí)。純熟掌握PL/SQL中控制結(jié)構(gòu)的使用。具體涉及選擇結(jié)構(gòu)語句(IF語句和CASE語句),循環(huán)結(jié)構(gòu)(四種循環(huán)結(jié)構(gòu))。純熟使用PL/SQL中系統(tǒng)函數(shù)。掌握PL/SQL中異常解決語句的使用掌握PL/SQL中SELECT語句和DML語句的綜合運(yùn)用。實(shí)驗(yàn)環(huán)境:硬件設(shè)備:PC機(jī)一臺(tái)操作系統(tǒng):WindowsXP應(yīng)用工具:Oracle10g實(shí)驗(yàn)內(nèi)容:(算法、程序、環(huán)節(jié)和方法)以SYS用戶登錄系統(tǒng)。代碼如下:Sqlplussys/123assysdba創(chuàng)建用戶,指定密碼、表空間。用戶名命名以本人姓名的縮寫+‘_’+學(xué)號最后兩位。代碼如下:Createuserty_06identifiedby123defaulttablespaceuserstemporarytablespacetemp;為該用戶授予sysdba、connect、resource權(quán)限。代碼如下:Grantsysdbatoty_06;Grantconnecttoty_06;Grantresourcetoty_06;以自己的用戶身份登錄。代碼如下:Connectty_06/123assysdba在本用戶方案中創(chuàng)建表departments,并為該表輸入若干數(shù)據(jù)。程序代碼如下:createtabledepartments(dep_idnumberprimarykey,dep_namevarchar2(20));INSERTINTOdepartmentsVALUES('1','人事部');INSERTINTOdepartmentsVALUES('2','辦公室');INSERTINTOdepartmentsVALUES('3','財(cái)務(wù)部');INSERTINTOdepartmentsVALUES('4','技術(shù)部');INSERTINTOdepartmentsVALUES('5','服務(wù)部');commit;執(zhí)行結(jié)果如下:在本用戶方案中創(chuàng)建表employees,并為該表輸入若干數(shù)據(jù)。程序代碼如下:createtableemployees(emp_idnumberprimarykey,emp_namevarchar2(20),sexvarchar2(2),titlevarchar2(10),wagenumber,idcardvarchar2(12),dep_idnumber,foreignkey(dep_id)referencesdepartments(dep_id));INSERTINTOemployeesVALUES('1','張三','男','部門經(jīng)理',6000,'1101123aadx1','1');INSERTINTOemployeesVALUES('2','李四','男','職工',3000,'1101123dddx2','1');INSERTINTOemployeesVALUES('3','王五','女','職工',3500,'1101123aadx3','1');INSERTINTOemployeesVALUES('4','趙六','男','部門經(jīng)理',6500,'1101123dddx4','2');INSERTINTOemployeesVALUES('5','高七','男','職工',2500,'1101123aadx5','2');INSERTINTOemployeesVALUES('6','馬八','男','職工',3100,'1101123dddx6','2');INSERTINTOemployeesVALUES('7','錢九','女','部門經(jīng)理',5000,'1101123aadx7','3');INSERTINTOemployeesVALUES('8','孫十','男','職工',2800,'1101123dddx8','3');commit;執(zhí)行結(jié)果如下:編寫PL/SQL程序,使用LOOP…EXIT…END語句計(jì)算1—100之間所有偶數(shù)之和。程序代碼如下:SETServerOutputON;DECLAREv_NumINTEGER:=2;v_SumINTEGER:=0;BEGINLOOPv_Sum:=v_Sum+v_Num;dbms_output.put_line(v_Num);EXITWHENv_Num=100;dbms_output.put_line('+');v_Num:=v_Num+2;ENDLOOP;dbms_output.put_line('=');dbms_output.put_line(v_Sum);END;執(zhí)行結(jié)果如下:編寫PL/SQL程序,查詢5號員工工資,假如工資小于3000,則加200工資,并提醒信息“5號員工工資已更新?!保偃绻べY大于3000,則提醒信息“5號員工工資為XXX,已達(dá)成規(guī)定標(biāo)準(zhǔn)?!背绦虼a如下:DECLAREtyemployees.wage%type;BEGINSelectwageintotyFromemployeesWhereemployees.emp_id=5;Ifty<3000thenUpdateemployeesSetemployees.wage=employees.wage+200Whereemployees.emp_id=5;Commit;DBMS_OUTPUT.PUT_LINE('5號工資已更新');ElseDBMS_OUTPUT.PUT_LINE('5號工資為'||ty||'已達(dá)成規(guī)定標(biāo)準(zhǔn)');ENDif;ExceptionWhenno_data_foundthenDBMS_OUTPUT.PUT_LINE('不存
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度全款購入進(jìn)口跑車合同范本3篇
- 二零二五年度企業(yè)與個(gè)人投資回報(bào)對賭協(xié)議3篇
- 二零二五年度員工試用期工作內(nèi)容調(diào)整及考核標(biāo)準(zhǔn)協(xié)議3篇
- 二零二五年度電商平臺(tái)商家會(huì)員返利合同3篇
- 2025年度新能源汽車產(chǎn)業(yè)鏈投資基金合作協(xié)議3篇
- 2025年度公司股東內(nèi)部關(guān)于企業(yè)并購整合的專項(xiàng)協(xié)議3篇
- 2025年度綠色能源項(xiàng)目分?jǐn)倕f(xié)議3篇
- 二零二五年度新能源汽車充電樁建設(shè)投資入股合同3篇
- 2025通信銷售合同
- 2025年農(nóng)村土地永久轉(zhuǎn)讓與農(nóng)村電商合作框架合同3篇
- 承壓設(shè)備事故及處理課件
- 煤層氣現(xiàn)場監(jiān)督工作要點(diǎn)
- 工會(huì)經(jīng)費(fèi)收支預(yù)算表
- 舒爾特方格55格200張?zhí)岣邔W⒘4紙直接打印版
- 質(zhì)量管理體系各條款的審核重點(diǎn)
- 聚丙烯化學(xué)品安全技術(shù)說明書(MSDS)
- BBC美麗中國英文字幕
- 衛(wèi)生院工程施工組織設(shè)計(jì)方案
- CDR-臨床癡呆評定量表
- 《八年級下學(xué)期語文教學(xué)個(gè)人工作總結(jié)》
- 鋁合金門窗制作工藝卡片 - 修改
評論
0/150
提交評論