Oracle數(shù)據(jù)庫管理與開發(fā)培訓(xùn)_第1頁
Oracle數(shù)據(jù)庫管理與開發(fā)培訓(xùn)_第2頁
Oracle數(shù)據(jù)庫管理與開發(fā)培訓(xùn)_第3頁
Oracle數(shù)據(jù)庫管理與開發(fā)培訓(xùn)_第4頁
Oracle數(shù)據(jù)庫管理與開發(fā)培訓(xùn)_第5頁
已閱讀5頁,還剩258頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Oracle數(shù)據(jù)庫管理與開發(fā)日程安排第一局部 Oracle快速入門、常用工具介紹 Oracle管理:對象、存儲、平安第二局部 SQL根底介紹——查詢、更新語句 SQL根底介紹——序列、權(quán)限等第三局部 PL/SQL根本概念、塊結(jié)構(gòu)、流程控制、游標(biāo) PL/SQL異常處理,存儲過程、函數(shù)、觸發(fā)器第一局部Oracle管理通過學(xué)習(xí)本課程,您將掌握:快速入門如何安裝Oracle數(shù)據(jù)庫軟件創(chuàng)立數(shù)據(jù)庫配置監(jiān)聽配置連接回憶常用工具根本Oracle管理根本概念介紹表、視圖、索引、函數(shù)等模式對象Oracle平安第一章快速入門目標(biāo)安裝Oracle軟件創(chuàng)立數(shù)據(jù)庫配置監(jiān)聽配置效勞名卸載Oracle任務(wù)1:安裝數(shù)據(jù)庫軟件目標(biāo):在剩余空間最大的分區(qū)X上安裝Oracle數(shù)據(jù)庫企業(yè)版Oracle_Base=X:\OracleOracle_Home_NameOH_DB10gOracle_Sid=orclOracle目錄結(jié)構(gòu)Oracle_BaseOracle_HomeOracle_Home\bin(Path環(huán)境變量)Oracle_Home\network任務(wù)2:創(chuàng)立數(shù)據(jù)庫使用DBCA工具進行創(chuàng)立OracleSIDOracle目錄結(jié)構(gòu)Oracle_Base\Admin目錄Oracle_Base\Oradata目錄任務(wù)3:配置監(jiān)聽目的:使客戶端可以連接到本數(shù)據(jù)庫任務(wù)4:配置網(wǎng)絡(luò)效勞名創(chuàng)立2個效勞名,一個指向本機〔mydb〕,另一個指向效勞器(pubdb),以便訪問效勞器上的數(shù)據(jù)庫,并進行測試。Oracle的卸載步驟正常卸載1備份數(shù)據(jù)庫;使用exp命令2刪除數(shù)據(jù)庫;使用dbca刪除數(shù)據(jù)庫使用netca刪除監(jiān)聽3卸載軟件UniversalInstaller強行卸載刪除Oracle相關(guān)目錄Oracle_Base下及C:\Programfiles\Oracle某些文件必須重新啟動后才能刪除刪除注冊表項HKLM\Software\Oracle和效勞相關(guān)的注冊項常用工具Sqlplus/sqlplusw命令行工具Exp/Imp——導(dǎo)入/導(dǎo)出工具Sqlldr——文本文件導(dǎo)入工具OEM——Oracle企業(yè)管理工具Netca——網(wǎng)絡(luò)配置助手dbca——數(shù)據(jù)庫配置助手UniversalInstaller——安裝器Sqlplus登錄設(shè)置環(huán)境執(zhí)行sql語句DDL語句(數(shù)據(jù)定義語句,如:表創(chuàng)立等)DML語句〔事務(wù)性語句,如:insert、update〕DCL語句〔控制語句,如:grant〕DBCANetcaNetca-效勞命配置樣例251=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.251)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=testdb)))OEM工具任務(wù)5:利用OEM工具創(chuàng)立表空間創(chuàng)立名為data的表空間,包含2個數(shù)據(jù)文件,data01.dbf,data02.dbf,大小分別為16M和32M://ligw:1158/em任務(wù)6:創(chuàng)立用戶創(chuàng)立名為yinhai的用戶,口令為password,設(shè)置默認表空間為data,在該表空間上的空間限額為20M,默認臨時表空間為temp。為yinhai用戶賦予connect,resource的角色權(quán)限。Exp/Imp工具的使用將oracle數(shù)據(jù)

二進制文件expuser/pass@svcfile=xxx.dmplog=xxx.log…Impuser/pass@svcfile=xxx.dmplog=xxx.logfull=y…任務(wù)5:導(dǎo)出Oracle對象目的:將Oracle某個用戶下的所有對象導(dǎo)出到一個二進制文件使用EXP命令expuser/pass@svcnamefile=xxx…重要參數(shù)filelogfeedbackquerytables任務(wù)6:將dmp文件導(dǎo)入到Oracle目的:將dmp文件導(dǎo)入到Oracle某個用戶下使用IMP命令impuser/pass@svcnamefile=xxx…重要參數(shù)fullfromusertouserfeedbackindexesrows任務(wù)7:利用OEM工具創(chuàng)立表部門表deptDeptnovarchar2(4)primarykey–部門編號Deptnamevarchar2(10)–部門名稱員工表emp:Deptnovarchar2(4)–部門編號外鍵Idnumber(4)primarykey, --使用序列自動編號Id_cardvarchar2(18) --身份證號碼Namevarchar2(10) --姓名Birthdaydate --出生日期Gender char(1) --性別男為1,女為2Graduated_From varchar2〔40〕--畢業(yè)院校Managernumber(4) --領(lǐng)導(dǎo)IDSalarynumber(7,2) --薪水Sqlldr編寫控制文件準(zhǔn)備數(shù)據(jù)文件運行sqlldr是否成功?任務(wù)8:將文本文件導(dǎo)入到庫表將文本文件內(nèi)的數(shù)據(jù)導(dǎo)入到y(tǒng)inhai用戶的emp表內(nèi)101,殷紹昕,2,KM,3,2450102,任海軍,1,KM,3,1780103,劉應(yīng)德,1,KM,3,3290104,郭志,1,CD,2,4580105,扶曉,2,CD,2,980106,房志勇,1,CD,2,1750107,韓蕭,2,CD,2,2300108,孟勐,2,KF,1,1400109,王健強,1,KF,1,1600110,王敏,1,KF,1,3200111,錢小峰,1,KF,1,4100Oracle根本概念實例、數(shù)據(jù)庫〔Oracle體系結(jié)構(gòu)〕Oracle存儲結(jié)構(gòu)Oracle平安Schema/模式/方案:模式對象:表、視圖、索引、過程、函數(shù)、包、同義詞、序列其它:OracleHome、效勞命名Oracle根本概念——實例與數(shù)據(jù)庫DatabaseInstanceSGARedolog

bufferDatabuffer

cacheSharedpoolDatadict.

cacheLibrarycachePMON

DBW0SMONLGWRCKPTOthersUser

processServer

processPGAControl

filesDatafilesRedolog

filesArchivedlogfilesParameterfilePasswordfileOracle根本概念——實例與數(shù)據(jù)庫的關(guān)系實例=后臺進程+內(nèi)存結(jié)構(gòu)數(shù)據(jù)庫=數(shù)據(jù)文件+控制文件+重做日志文件一個實例只能翻開一個數(shù)據(jù)庫Oracle根本概念——存儲結(jié)構(gòu)Oracle根本概念——存儲——邏輯結(jié)構(gòu)數(shù)據(jù)庫 database表空間 tablespace段 segment區(qū)extent塊OracleBlockOracle根本概念——平安用戶兩個特殊用戶sys和system數(shù)據(jù)字典普通用戶角色DBA、ConnectOracle模式對象表視圖索引序列同義詞函數(shù)過程程序包Oracle的效勞OracleOracle_HomeTNSListenerOracleServiceDBNamenetstart/stopservice_name對于監(jiān)聽,lsnrctlstart/stop第二局部SQL根底查詢〔簡單查詢、多表、子查詢、使用函數(shù)、聚集…〕DML(InsertUpdateDelete)表、視圖、約束其它數(shù)據(jù)庫對象第一章編寫根本的SQLSelect語句查詢指定的列/所有列/檢索唯一值,使用表達式,使用別名SELECT*|{[DISTINCT]column|expression[alias],…}

FROMtable;SELECT*FROMtable;SELECTa,b,cfromtable;關(guān)于SQL語句大小寫不敏感可以多行編寫關(guān)鍵字不可以縮寫或跨越多行通常每個子句占據(jù)一行使用縮進增加可讀性列的別名〔Alias〕用于重命名列表題緊跟在列名后,列名和別名之間可以加AS〔可選〕如果別名包含大小寫或者空格,那么必須用雙引號引起 SELECTname“EmployeeName", salary*12"AnnualSalary" FROMemp;連接運算符〔||〕將多個列或文本連接在一起

SELECTname||‘的工資是’||salaryAS"Employees" FROMemp;去除重復(fù)行使用DISTINCT關(guān)鍵字去除重復(fù)行

SELECTDISTINCTdeptid FROMemp;第二章限制結(jié)果級、排序使用where子句對結(jié)果進行篩選使用orderby字句對結(jié)果進行排序WHERE子句緊跟在FROM子句后語法SELECT*|{[DISTINCT]column|expression[alias],...}FROMtable[WHEREcondition(s)];字符串和日期Select字句中的表達式和Where條件中的表達式里面都可以使用字符串和日期字符串和日期要用單引號引起,字符串大小寫敏感日期有一定的格式,默認是DD-MON-RR使用比較運算符=,>,>=,<,<=,<>BETWEEN…AND…IN(SET)LIKE‘…[%]...[_]...’ESCAPE‘\’ISNULL邏輯運算符ANDSELECTname,salaryFROMempWHEREsalary>=4000ANDgender=‘1’;ORSELECTname,salaryFROMempWHEREsalary>=4000ORgender=‘1’;NOTSELECTname,salaryFROMempWHERENOT(salary>=4000ANDgender=‘1’);優(yōu)先順序規(guī)那么優(yōu)先級 操作符0 括號1 算數(shù)運算符*/+-2 連接運算符||3 比較條件>,<,=,…4 IS[NOT]NULL,LIKE,[NOT]IN5 [NOT]BETWEEN6 NOT7 AND8 ORORDERBY子句使用ORDERBY字句進行排序

ASC:升序(默認)

DESC:降序ORDERBY字句位于SELECT語句的最后ORDERBY子句可以按別名進行排序,也可以用列序號排序ORDERBY1; --按第一列排序ORDERBY后可以指定多列每列可以分別指定ASC或DESC排序列不一定要出現(xiàn)在SELECT子句中第三章單行函數(shù)SQL函數(shù)類型單行函數(shù),每一行返回一個結(jié)果多行函數(shù),對多行才返回一個結(jié)果,用于聚集單行函數(shù)接受參數(shù)并返回一個值作用于select語句返回的每一行每行返回一個結(jié)果可以修改數(shù)據(jù)類型可以嵌套參數(shù)可以是某個列或表達式單行函數(shù)類別通用類和NULL相關(guān)字符類大小寫相關(guān)LOWER,UPPER,INITCAP字符處理CONCAT,SUBSTR,LENGTH,INSTR,LPAD|RPAD,TRIM,REPLACE數(shù)字類ROUND,MOD,TRUNC日期類SYSDATE轉(zhuǎn)換類TO_CHAR,TO_DATE,TO_NUMER對日期的操作對一個日期值加上或減去一個數(shù)值〔天數(shù)〕得到一個新的日期兩個日期相減得到相差的天數(shù)日期也可以和小時數(shù)進行加減,前提是小時數(shù)要除以24日期函數(shù)函數(shù)含義MONTHS_BETWEEN兩個日期間相隔的月數(shù)ADD_MONTHS將一個日期加上n個月NEXT_DAY指定日期后的下一個星期X的日期LAST_DAY某月的最后一天ROUND對日期進行四舍五入TRUNC對日期進行截取轉(zhuǎn)換函數(shù)TO_DATETO_NUMBERTO_CHARTO_CHAR字符串日期數(shù)字日期與字符串間的轉(zhuǎn)換日期——〉字符串TO_CHAR(date,format)字符串——〉日期TO_DATE(string,format)Format的格式Y(jié)YYY,YY,MONTH,MON,MM,DAY,DD,HH,MI,SS字符串與數(shù)字鍵的轉(zhuǎn)換TO_CHAR(string,format〕9代表一個數(shù)字0強制顯示0$貨幣符號L本地貨幣符號.小數(shù)點,千分位使用NULL值定義:不可知、未定義、不可訪問的值數(shù)字0,字符空格不是NULL表達式中如果包含NULL值,那么結(jié)果也為NULL通用類函數(shù)——NULL相關(guān)NVL(A,B)如果A為null那么返回B,否那么返回ANVL2(A,B,C)如果A不為null那么返回B,否那么返回CNULLIF(A,B)如果A和B相等那么返回NULL,否那么返回ACOALESCE(expr1,expr2,…,exprn)返回清單中第一個非空值條件表達式CASE語句CASEexpr WHENcomparison_expr1THENreturn_expr1 [WHENcomparison_expr2THENreturn_expr2 WHENcomparison_exprnTHENreturn_exprn ELSEelse_expr]ENDDECODE語句(col|expression,search1,result1[,search2,result2,...,][,default])第四章從多表中檢索數(shù)據(jù)目標(biāo)使用等值連接或非等值連接從多表中檢索數(shù)據(jù)使用外連接檢索不滿足等值條件的數(shù)據(jù)行使用自連接將一個表和自身進行連接迪卡爾集產(chǎn)生的原因沒有指定連接連接無效第一個表中的每一行都和另外一個表的每一行進行了連接使用WHERE字句防止卡迪爾集卡迪爾集的危害產(chǎn)生n1*n2*…*nn行結(jié)果連接類型等值連接非等值連接外連接自連接等值連接SELECTtable1.column,table2.columnFROMtable1,table2WHEREtable1.column1=table2.column2;多表中的同名列使用表前綴來明確多個表中同名的列使用表前綴可以提高性能使用列別名來區(qū)分多個表中同名的列使用表別名簡化查詢Simplifyqueriesbyusingtablealiases提高性能連接超過2個以上的表如果有n個表進行等值連接,至少需要n-1個連接條件非等值連接使用IN,BETWEENAND,>,<,…外連接使用外連接將那些不匹配的行也顯示出來外連接的操作符是(+)(+)放在缺失值得那一邊SELECTtable1.column,table2.columnFROMtable1,table2WHEREtable1.column(+)=table2.column;SELECTtable1.column,table2.columnFROMtable1,table2WHEREtable1.column=table2.column(+);自連接必須使用別名第五章使用分組函數(shù)聚集數(shù)據(jù)分組函數(shù)的結(jié)果是對記錄集進行分組,每一組返回一行常用的分組函數(shù)AVG,MAX,MIN,COUNT,SUMSTDDEV,VARIANCE分組函數(shù)語法SELECT[column,]group_function(column),...FROMtable[WHEREcondition][GROUPBYcolumn][HAVINGcondition][ORDERBYcolumn];在分組函數(shù)中使用DISTINCTCOUNT(DISTINCTexpr)AVG(DISTINCTexpr)分組函數(shù)中對NULL值的考慮分組函數(shù)會忽略包含NULL值的行使用NVL函數(shù)解決此問題GROUPBY子句的用法SELECT子句中沒有出現(xiàn)在分組函數(shù)中的列或表達式必須也包含在GROUPBY子句中GROUPBY子句中的列,不一定要出現(xiàn)在SELECT子句中GROUPBY子句中可以包含多列〔表達式〕常見的錯誤非分組函數(shù)沒有出現(xiàn)在groupby子句SELECTdepartment_id,AVG(salary)FROMemployeesWHEREAVG(salary)>8000GROUPBYdepartment_id;在where子句中使用了分組函數(shù)〔應(yīng)使用having子句來替換〕SELECTdepartment_id,AVG(salary)FROMemployeesWHEREAVG(salary)>8000GROUPBYdepartment_id;HAVING子句Where子句的作用哪些行參加分組?Groupby子句的作用如何進行分組?Having子句的作用哪些分組被顯示?HAVING子句舉例SELECTjob_id,SUM(salary)PAYROLLFROMemployeesWHEREjob_idNOTLIKE'%REP%'GROUPBYjob_idHAVINGSUM(salary)>13000ORDERBYSUM(salary);分組函數(shù)可以進行嵌套SELECTMAX(AVG(salary))FROMemployeesGROUPBYdepartment_id;第六章子查詢目標(biāo):子查詢可以解決哪些問題?如何定義子查詢?子查詢的不同類型單行/多行的子查詢使用子查詢來解決一個問題誰的工資比張三高?解題步驟:先得到張三的工資xxx找出工資>xxx的那些人

子查詢的語法SELECTselect_listFROMtableWHERE

exproperator(SELECTselect_listFROMtable);子查詢本卷須知用括號將子查詢括起子查詢置于比較操作符右側(cè)子查詢內(nèi)部不需要ORDERBY子句,除非你要進行Top-N分析對于單行子查詢使用單行操作符,對于多行子查詢使用多行操作符單行子查詢只返回一行使用單行比較操作符<,<=,>,>=,<>使用多個子查詢哪些人和張三在同一個部門,但工資比李四高?SELECTlast_name,job_id,salaryFROMemployeesWHEREjob_id=(SELECTjob_idFROMemployeesWHEREemployee_id=141)ANDsalary>(SELECTsalaryFROMemployeesWHEREemployee_id=143);子查詢中使用分組函數(shù)SELECTlast_name,job_id,salaryFROMemployeesWHEREsalary=(SELECTMIN(salary)FROMemployees);HAVING子句中使用子查詢SELECTdepartment_id,MIN(salary)FROMemployeesGROUPBYdepartment_idHAVINGMIN(salary)>(SELECTMIN(salary)FROMemployeesWHEREdepartment_id=50);找錯SELECTemployee_id,last_nameFROMemployeesWHEREsalary=(SELECTMIN(salary)FROMemployeesGROUPBYdepartment_id);找錯SELECTlast_name,job_idFROMemployeesWHEREjob_id=(SELECTjob_idFROMemployeesWHERElast_name='Haas');多行子查詢返回多行多行操作符INANYALL使用ANYSELECTemployee_id,last_name,job_id,salaryFROMemployeesWHEREsalary<ANY(SELECTsalaryFROMemployeesWHEREjob_id='IT_PROG')ANDjob_id<>'IT_PROG';使用ALLSELECTemployee_id,last_name,job_id,salaryFROMemployeesWHEREsalary<ALL(SELECTsalaryFROMemployeesWHEREjob_id='IT_PROG')ANDjob_id<>'IT_PROG';子查詢中的NULL--下面的語句為什么不能返回行?SELECTemp.last_nameFROMemployeesempWHEREemp.employee_idNOTIN(SELECTmgr.manager_idFROMemployeesmgr);第七章使用SQL*PLUS目標(biāo)使用替代變量定制SQL*PLUS環(huán)境輸出具可讀性的報表創(chuàng)立和執(zhí)行腳本文件SQL*PLUS能做什么?描述數(shù)據(jù)庫對象的結(jié)構(gòu)編輯/執(zhí)行SQL語句將SQL語句保存到文件中調(diào)用已經(jīng)編寫好的SQL輸出報表替代變量的作用存儲臨時數(shù)據(jù)&&&DEFINE命令在SQL語句間傳遞參數(shù)動態(tài)更改頁眉和頁腳的值使用替代變量SELECTemployee_id,last_name,salary,department_idFROMemployeesWHEREemployee_id=&employee_num;使用替代變量——日期和字符串對于這兩種類型的替代變量必須用單引號括起來SELECTlast_name,department_id,salary*12FROMemployeesWHEREjob_id='&job_title';指定列名、表達式和文本在以下子句后可以使用替代變量WHERE子句ORDERBY子句列或表達式表名整個SELECT語句定義替代變量使用DEFINE命令定義替代變量DEFINEvariable=value如果變量的值包含空格,需要用單引號引起定義的變量只在當(dāng)前會話有效用UNDEFINE命令去除變量&&替代變量此種替代變量SQL*PLUS會自動用DEFINE命令生成一個變量,用戶只得到一次提示SELECTemployee_id,last_name,job_id,&&column_nameFROMemployeesORDERBY&column_name;定制SQL*PLUS環(huán)境語法SETvariablevalueSetserveroutputonSHOWvariable常用的變量pagesize,linesizeheading,feedback格式命令COLUMNCOL[UMN][{column|alias}[option]]CLEAR/FORMAT/NOPRINT/NULL/HEADINGTTITLETTITLEtextBTITILEBTITLEtextBREAKBREAKON創(chuàng)立一個打印報表的腳本編輯好查詢語句設(shè)定顯示格式,將這些命令放在SELECT語句之前在SELECT語句之后去除格式設(shè)定保存該腳本文件調(diào)用執(zhí)行SQLVSSQLPlusSQLSQL*Plus?一種語言?一個運行SQL命令的環(huán)境?ANSI標(biāo)準(zhǔn)?Oracle公司開發(fā)?關(guān)鍵字不可以簡寫?關(guān)鍵字可以縮寫?處理數(shù)據(jù)庫中對象的定義和數(shù)據(jù)?相關(guān)命令不會影響到數(shù)據(jù)庫第八章處理數(shù)據(jù)目標(biāo)描述DML語句插入數(shù)據(jù)更新數(shù)據(jù)刪除數(shù)據(jù)合并數(shù)據(jù)處理事務(wù)DML語句當(dāng)發(fā)生以下情況時會執(zhí)行DML語句往表中添加新行修改表中現(xiàn)有的行刪除表中的數(shù)據(jù)事務(wù)是能夠?qū)崿F(xiàn)一個功能的一組DML語句INSERT語句語法INSERTINTOtable[(column[,column...])]VALUES(value[,value...]);一次只能插入一行如果column不指定,那么按表中列的順序依次輸入值;可以指定只插入哪些列在INSERT語句中使用特殊值插入NULL值,使用NULL或直接略去該字段插入SYSDATE使用to_date函數(shù)使用替代變量DEFAULT(也可用于UPDATE語句)從另外一個表復(fù)制數(shù)據(jù)INSERTINTOaSELECT*FROMb;使用這種方法,不能使用VALUES關(guān)鍵字,列必須配對更新語句——UPDATE語法UPDATEtableSETcolumn=value[,column=value,...][WHEREcondition];使用子查詢UPDATEemployeesSETjob_id=( SELECTjob_id FROMemployees WHEREemployee_id=205),salary=( SELECTsalary FROMemployees WHEREemployee_id=205)WHEREemployee_id=114;基于另外一個表進行更新UPDATEcopy_empSETdepartment_id= (SELECTdepartment_id FROMemployees WHEREemployee_id=100)WHEREjob_id= (SELECTjob_id FROMemployees WHEREemployee_id=200);完整性約束更改一個表的外鍵時,如果對應(yīng)的主鍵不存在會引發(fā)此錯誤UPDATEemployeesSETdepartment_id=55WHEREdepartment_id=110;刪除語句——DELETE語法DELETE[FROM]table[WHEREcondition];在DELETE語句中使用子查詢DELETEFROMemployeesWHEREdepartment_id=(SELECTdepartment_idFROMdepartmentsWHEREdepartment_nameLIKE'%Public%');刪除時的完整性約束如果刪除父表時,子表還包含記錄的情況下會引發(fā)此錯誤DELETEFROMdepartmentsWHEREdepartment_id=60;MERGE語句根據(jù)條件進行動態(tài)插入或更新MERGEINTOtable_nameAStable_aliasUSING(table|view|sub_query)ASaliasON(joincondition)WHENMATCHEDTHENUPDATESETcol1=col_val1,col2=col2_valWHENNOTMATCHEDTHENINSERT(column_list)VALUES(column_values);MERGE樣例MERGEINTOcopy_empAScUSINGemployeeseON(c.employee_id=e.employee_id)WHENMATCHEDTHENUPDATESETc.first_name=e.first_name,c.last_name=e.last_name,...c.department_id=e.department_idWHENNOTMATCHEDTHENINSERTVALUES(e.employee_id,e.first_name,e.last_name,e.email,e.phone_number,e.hire_date,e.job_id,e.salary,emission_pct,e.manager_id,e.department_id);數(shù)據(jù)庫事務(wù)管理有3種事務(wù)DDLDMLDCL數(shù)據(jù)庫事務(wù)當(dāng)開始執(zhí)行第一個DML語句時事務(wù)開始當(dāng)發(fā)生以下事件時事務(wù)結(jié)束:執(zhí)行了COMMIT或ROLLBACK語句當(dāng)DML語句后遇到DDL/DCL語句,事務(wù)結(jié)束并且自動提交用戶退出SQL*PLUS系統(tǒng)崩潰SAVEPOINT設(shè)置保存點,以便可以回滾到指定點UPDATE...SAVEPOINTupdate_done;Savepointcreated.INSERT...ROLLBACKTOupdate_done;Rollbackcomplete.隱含的事務(wù)處理當(dāng)遇到以下情況事務(wù)自動提交遇到DDL語句遇到DCL語句正常退出SQL*PLUS,但沒有明確輸入COMMIT或ROLLBACK當(dāng)遇到以下情況事務(wù)自動回滾不正常退出SQL*PLUS系統(tǒng)失敗事務(wù)提交或回滾前的狀態(tài)數(shù)據(jù)可以恢復(fù),使用ROLLBACK可以使用SELECT語句查看修改情況其它用戶看不到當(dāng)前用戶所做的修改其它用戶不能修改被當(dāng)前用戶修改的數(shù)據(jù)行,除非當(dāng)前用戶執(zhí)行COMMIT或者ROLLBACK事務(wù)提交后的數(shù)據(jù)狀態(tài)被修改后的數(shù)據(jù)永久保存在數(shù)據(jù)庫中之前的狀態(tài)永久喪失所有用戶可以看到提交后的數(shù)據(jù)在行上的數(shù)據(jù)鎖釋放,其它用戶可以進行DML操作所有的保存點被刪除事務(wù)回滾后的數(shù)據(jù)狀態(tài)對數(shù)據(jù)所做的修改被撤銷恢復(fù)到之前一個狀態(tài)行上的鎖被釋放語句級回滾如果單個DML語句執(zhí)行失敗,那么只有當(dāng)前語句回滾Oracle效勞器隱含的設(shè)置了一個保存點所有其它DML語句所做的修改仍然保存用戶應(yīng)當(dāng)顯式指定COMMIT或者ROLLBACK第九章創(chuàng)立和管理表目標(biāo)描述主要的數(shù)據(jù)庫對象創(chuàng)立表描述可用的列類型更改表的定義刪除、重命名、截取表Oracle主要的數(shù)據(jù)庫對象表根本的存儲單元,由行和列組成視圖從一個或多個表中的數(shù)據(jù)展現(xiàn)子集序列產(chǎn)生連續(xù)的數(shù)字索引用于提高查詢性能同義詞給對象定義別名命名規(guī)那么標(biāo)名和列名命名規(guī)那么:以字母開頭最大30個字符只能包含大小寫字母、數(shù)字、下劃線、$、#不能和當(dāng)前用戶下的其它對象重名不能使用Oracle保存字創(chuàng)立表的前提擁有CreateTable權(quán)限CREATETABLE[schema.]table(columndatatype[DEFAULTexpr][,...]);擁有存儲空間創(chuàng)立表時要指定表名、列名、列的類型、字段長度等在其它用戶下創(chuàng)立表要在表名前加用戶名username.table為列指定默認值可以使用表達式,普通文本或SQL函數(shù)等不可以引用另外一個列名或偽列默認值的數(shù)據(jù)類型必須和列類型一致Oracle數(shù)據(jù)庫中的表包含兩種類型用戶表由用戶創(chuàng)立并維護包含用戶的信息數(shù)據(jù)字典描述用戶表的表/視圖由Oracle效勞器創(chuàng)立并維護包含的是數(shù)據(jù)庫的信息查詢數(shù)據(jù)字典查詢當(dāng)前用戶擁有哪些表查詢當(dāng)前用戶擁有哪些類型的對象查詢當(dāng)前用戶擁有哪些表、視圖、同義詞以及序列列的數(shù)據(jù)類型數(shù)據(jù)類型描述VARCHAR2(size)變長的字符串CHAR[(size)]固定長度的字符串NUMBER[(p,s)]變長數(shù)字DATE日期和時間值LONG變長字符數(shù)據(jù),最大可達2GBCLOB字符數(shù)據(jù),最大可達4GBRAWandLONGRAWRawbinarydataBLOB二進制數(shù)據(jù),最大可達4GBBFILE存儲在外部的文件(存儲在文件系統(tǒng)中),最大可達4GBROWID16進制的字符串,代表行在表中的唯一地址通過子查詢創(chuàng)立表創(chuàng)立表并同時生成數(shù)據(jù)CREATETABLEtable[(column,column...)]ASsubquery;復(fù)制表時非常有用ALTERTABLE語句使用該語句實現(xiàn)添加新列修改現(xiàn)有列為列設(shè)置默認值刪除列刪除、重命名、截取表刪除表DROPTABLE重命名表RENAMEtableATOtableB;截取表TRUNCATETABLEtable;注釋表注釋COMMENTONTABLEtableIS‘comments’;列注釋COMMENTONCOLUMNtable.columnIS‘comments’;查看以下數(shù)據(jù)字典獲得注釋信息ALL_COL_COMMENTSUSER_COL_COMMENTSALL_TAB_COMMENTSUSER_TAB_COMMENTS第十章約束目標(biāo)描述約束創(chuàng)立并維護約束什么是約束約束是表一級的強制規(guī)那么約束可以防止數(shù)據(jù)被刪除如果存在依賴關(guān)系約束的類型非空約束唯一約束主鍵約束外鍵約束檢查約束約束系統(tǒng)產(chǎn)生的約束格式為SYS_CN可以在創(chuàng)立表的同時創(chuàng)立約束,也可以在創(chuàng)立完表后創(chuàng)立約束約束可以定義在表一級或列級通過數(shù)據(jù)字典查詢約束定義約束列一級約束:column[CONSTRAINTconstraint_name]constraint_type,表一級約束:column,...[CONSTRAINTconstraint_name]constraint_type(column,...),非空約束——NOTNULL確??罩挡荒懿迦氲搅兄蠧REATETABLEemployees(employee_idNUMBER(6),last_nameVARCHAR2(25)NOTNULL,salaryNUMBER(8,2),commission_pctNUMBER(2,2),hire_dateDATECONSTRAINTemp_hire_date_nnNOTNULL,唯一約束——UNIQUE確保表中的列值沒有重復(fù)CREATETABLEemployees(employee_idNUMBER(6),last_nameVARCHAR2(25)NOTNULL,emailVARCHAR2(25),salaryNUMBER(8,2),commission_pctNUMBER(2,2),hire_dateDATENOTNULL,...CONSTRAINTemp_email_ukUNIQUE(email));主鍵約束——PRIMARYKEY可以定義在列一級或表一級CREATETABLEdepartments(department_idNUMBER(4),department_nameVARCHAR2(30)CONSTRAINTdept_name_nnNOTNULL,manager_idNUMBER(6),location_idNUMBER(4),CONSTRAINTdept_id_pkPRIMARYKEY(department_id));外鍵——FOREIGNKEY同樣可以定義在列或表一級CREATETABLEemployees(employee_idNUMBER(6),last_nameVARCHAR2(25)NOTNULL,emailVARCHAR2(25),salaryNUMBER(8,2),commission_pctNUMBER(2,2),hire_dateDATENOTNULL,...department_idNUMBER(4),CONSTRAINTemp_dept_fkFOREIGNKEY(department_id)REFERENCESdepartments(department_id),CONSTRAINTemp_email_ukUNIQUE(email));外鍵——FOREIGNKEYREFERENCES:要引用父表的列ONDELETECASCADE:級聯(lián)刪除ONDELETESETNULL檢查約束——CHECK定義每行數(shù)據(jù)必須滿足的條件錯誤的用法使用CURRVAL,NEXTVAL,LEVEL,ROWNUM偽列調(diào)用SYSDATE,UID,USER,和USERENV引用其它行的值使用ALTERTABLE命令創(chuàng)立約束語法ALTERTABLEtableADD[CONSTRAINTconstraint]type(column);添加或刪除約束激活或禁用約束使用MODIFY子句添加NOTNULL約束添加外鍵約束為員工表的manager字段添加外鍵ALTERTABLEemployeesADDCONSTRAINTemp_manager_fkFOREIGNKEY(manager_id)REFERENCESemployees(employee_id);刪除約束ALTERTABLEtable_nameDROPCONSTRAINTconstraint_name;刪除主鍵的同時刪除外鍵ALTERTABLEtable_nameDROPPRIMARYKEYCASCADE;禁用、激活約束激活約束ALTERTABLEemployeesENABLECONSTRAINTemp_emp_id_pk;禁用約束ALTERTABLEemployeesDISABLECONSTRAINTemp_emp_id_pkCASCADE;刪除列時級連刪除約束刪除列時指定CASCADE時,會刪除和此列相關(guān)的所有約束,包括多列約束〔主鍵〕ALTERTABLEtable_nameDROPCOLUMNcolumn_nameCASCADE;查詢約束數(shù)據(jù)字典USER_CONSTRAINTS數(shù)據(jù)字典USER_CONS_COLUMNS第十一章創(chuàng)立視圖目標(biāo)描述視圖創(chuàng)立、修改視圖的定義,刪除視圖通過視圖檢索數(shù)據(jù)通過視圖插入、修改、刪除數(shù)據(jù)創(chuàng)立、使用內(nèi)聯(lián)視圖TOP-N分析什么是視圖什么是視圖表的一個透視圖邏輯概念,不占據(jù)存儲為什么使用視圖顯示數(shù)據(jù)的訪問簡化復(fù)雜查詢提供數(shù)據(jù)獨立性為同一數(shù)據(jù)提供不同展現(xiàn)創(chuàng)立視圖在CREATEVIEW后跟隨一個子查詢CREATE[ORREPLACE][FORCE|NOFORCE]VIEWview[(alias[,alias]...)]ASsubquery為視圖列命名子查詢中可以使用別名視圖名后跟別名列表查詢視圖SELECT*FROMview_name;同從表檢索數(shù)據(jù)沒有區(qū)別修改視圖仍然使用CREATEORREPLACEVIEWView_name后的別名列表必須和子查詢的字段列表意義對應(yīng)創(chuàng)立一個稍微復(fù)雜的視圖找出各個部門的最高、最低工資、平均工資,按部門名稱分組CREATEVIEWdept_sum_vu(name,minsal,maxsal,avgsal)ASSELECTd.department_name,MIN(e.salary),MAX(e.salary),AVG(e.salary)FROMemployeese,departmentsdWHEREe.department_id=d.department_idGROUPBYd.department_name;在視圖上進行DML語句的規(guī)那么可以在簡單視圖上進行DML操作如果視圖包含以下情形時不能從視圖中刪除行分組函數(shù)GROUPBY子句DISTINCT關(guān)鍵字偽列ROWNUM在視圖上進行DML語句的規(guī)那么如果視圖包含以下情形時不能在視圖中更新行分組函數(shù)GROUPBY子句DISTINCT關(guān)鍵字偽列ROWNUM列的定義是一個表達式在視圖上進行DML語句的規(guī)那么如果視圖包含以下情形時不能在視圖中添加行分組函數(shù)GROUPBY子句DISTINCT關(guān)鍵字偽列ROWNUM列的定義是一個表達式基表中包含非空字段,但不包含在視圖中刪除視圖DROPVIEWview_name;內(nèi)聯(lián)視圖指在SQL語句內(nèi)的某個查詢,包含有別名,可以被該SQL語句引用SELECTa.last_name,a.salary,a.department_id,b.maxsalFROMemployeesa,(SELECTdepartment_id,max(salary)maxsalFROMemployeesGROUPBYdepartment_id)bWHEREa.department_id=b.department_idANDa.salary<b.maxsal;Top-n分析工資最高的前十名員工SELECTROWNUMasRANK,last_name,salaryFROMemployeesORDERBYsalaryDESC)WHEREROWNUM<=3;第十二章其它數(shù)據(jù)庫對象目標(biāo)創(chuàng)立、使用、管理序列創(chuàng)立、管理同義詞創(chuàng)立私有和公有的同義詞什么是序列一個序列可以:自動產(chǎn)生唯一的數(shù)字是可共享的對象主要用于產(chǎn)生主鍵的值減少應(yīng)用中產(chǎn)生主鍵的代碼將序列環(huán)存在內(nèi)存中可以提高性能創(chuàng)立序列CREATESEQUENCEsequence[INCREMENTBYn][STARTWITHn][{MAXVALUEn|NOMAXVALUE}][{MINVALUEn|NOMINVALUE}][{CYCLE|NOCYCLE}][{CACHEn|NOCACHE}];創(chuàng)立序列為dept表的主鍵創(chuàng)立一個序列CREATESEQUENCEdept_deptid_seqINCREMENTBY10STARTWITH120MAXVALUE9999NOCACHENOCYCLE;確認已經(jīng)創(chuàng)立序列通過查詢數(shù)據(jù)字典進行確認SELECTsequence_name,min_value,max_value,increment_by,last_numberFROMuser_sequences;NEXTVAL和CURRVAL偽列NEXTVAL返回下一可用的序列值每次被引用時都是返回唯一的值,即使是被不同的用戶引用CURRVAL用于獲得當(dāng)前的序列值至少要調(diào)用NEXTVAL一次,CURRVAL才會包含值使用序列INSERTINTOdepartments(department_id,department_name,location_id)VALUES(dept_deptid_seq.NEXTVAL,'Support',2500);使用序列將序列緩存到內(nèi)存中以提高性能當(dāng)發(fā)生以下情況時,序列會發(fā)生“斷層”發(fā)生回滾系統(tǒng)崩潰序列在其它表中被引用如果序列創(chuàng)立時指定NOCACHE,可以在數(shù)據(jù)字典USER_SEQUENCES中查詢下一可用序列值。修改序列修改序列的增量、最大、最小值,循環(huán)和混存選項ALTERSEQUENCEdept_deptid_seqINCREMENTBY20MAXVALUE999999NOCACHENOCYCLE;使用序列時的本卷須知修改序列時必須是序列的屬主或者擁有修改序列的權(quán)限如果序列被修改,只有后續(xù)的序列值被影響如果希望序列以另外一個不同的數(shù)字開頭,那么必須先刪除序列,然后重建使用序列時會進行一些校驗刪除序列DROPSEQUENCEseq_name;什么是索引索引是:一種模式對象引入索引是為了查詢時提高性能較少磁盤I/O獨立于表創(chuàng)立后,由Oracle效勞器自動維護索引是如何創(chuàng)立的自動創(chuàng)立:當(dāng)定義了一個主鍵或唯一約束時會自動創(chuàng)立唯一索引手動創(chuàng)立:用戶可以創(chuàng)立非唯一的索引以加快對列的訪問創(chuàng)立索引CREATEINDEXindexONtable(column[,column]...);何時該創(chuàng)立索引你應(yīng)當(dāng)創(chuàng)立索引,如果發(fā)生以下情況:一個列的取值范圍比較廣列包含了大量的空值一個或多個列經(jīng)常在WHERE或連接子句中被一起使用表非常大,但每次的查詢的數(shù)據(jù)不超過總數(shù)據(jù)的2%——4%何時不該創(chuàng)立索引以下情況無需創(chuàng)立索引:小表沒有經(jīng)常在條件中使用的列大局部的查詢都會查詢超過2——4%的數(shù)據(jù)表會經(jīng)常被更新索引列被作為表達式的一局部被引用確認索引USER_INDEXES數(shù)據(jù)字典包含了索引的信息USER_IND_COLUMNS包含索引的名字,相關(guān)的表名、列。基于函數(shù)的索引基于函數(shù)的索引只基于表達式的索引索引表達式根據(jù)表列,常數(shù),SQL函數(shù)和用戶自定義的函數(shù)創(chuàng)立而成CREATEINDEXupper_dept_name_idxONdepartments(UPPER(department_name));Indexcreated.SELECT*FROMdepartmentsWHEREUPPER(department_name)='SALES';刪除索引DROPINDEXidx_name;同義詞通過創(chuàng)立同義詞,可以簡化對數(shù)據(jù)庫對象的訪問,相當(dāng)于給對象起了另外一個名字使用同義詞,可以簡化對另外一個用戶下對象的訪問減少了數(shù)據(jù)庫對象的名字創(chuàng)立同義詞的語法CREATE[PUBLIC]SYNONYMsynonymFORobject;創(chuàng)立和刪除同義詞為DEPT_SUM_VU視圖創(chuàng)立一個同義詞,使用更短的名字.CREATESYNONYMd_sumFORdept_sum_vu;刪除同義詞DROPSYNONYMd_sum;第十三章控制用戶權(quán)限目標(biāo)創(chuàng)立用戶創(chuàng)立角色來簡化對權(quán)限模型管理使用GRANT和REVOKE語句進行權(quán)限授權(quán)和回收創(chuàng)立并訪問數(shù)據(jù)庫鏈接權(quán)限數(shù)據(jù)庫權(quán)限:系統(tǒng)平安數(shù)據(jù)平安系統(tǒng)權(quán)限:獲得對數(shù)據(jù)庫的訪問權(quán)對象權(quán)限:對數(shù)據(jù)庫對象的內(nèi)容的訪問模式:對象的集合系統(tǒng)權(quán)限有100多個系統(tǒng)權(quán)限.數(shù)據(jù)庫管理員用戶比較高級的權(quán)限:創(chuàng)立新用戶刪除用戶刪除表備份表創(chuàng)立用戶DBA使用CREATEUSER語句創(chuàng)立用戶CREATEUSERusernameIDENTIFIEDBYpassword;創(chuàng)立用戶后,DBA必須賦予一些系統(tǒng)權(quán)限GRANTprivilege[,privilege...]TOuser[,user|role,PUBLIC...];修改用戶密碼ALTERUSERusernameIDENTIFIEDBYpassword;什么是角色角色相當(dāng)于一個權(quán)限的集合,給角色賦予一定的權(quán)限,然后將權(quán)限賦給用戶,簡化了權(quán)限管理。創(chuàng)立角色將系統(tǒng)權(quán)限、對象權(quán)限賦給角色將角色賦給用戶對象權(quán)限對象權(quán)限

視圖

序列

存儲過程

ALTER

DELETE

EXECUTE

INDEX√

INSERT√

REFERENCES

SELECT

UPDATE√

對象權(quán)限不同的對象有不同的對象權(quán)限屬主擁有所有該用戶下對象的權(quán)限屬主可以將所屬對象的權(quán)限賦給其他用戶GRANTobject_priv[(columns)]ONobjectTO{user|role|PUBLIC}[WITHGRANTOPTION];對象權(quán)限的賦權(quán)將對象的查詢權(quán)限賦予他人將對象的更新權(quán)限賦予他人授權(quán)時使用WITHGRANTOPTION將對象權(quán)限賦予PUBLIC相關(guān)的數(shù)據(jù)字典數(shù)據(jù)字典視圖描述ROLE_SYS_PRIVS賦給角色的系統(tǒng)權(quán)限ROLE_TAB_PRIVS賦給角色的表權(quán)限USER_ROLE_PRIVS用戶可用的角色USER_TAB_PRIVS_MADE賦給用戶的對象權(quán)限USER_TAB_PRIVS_RECD賦給用戶的對象權(quán)限USER_COL_PRIVS_MADE賦給用戶列上的對象權(quán)限USER_COL_PRIVS_RECD賦給用戶列上的對象權(quán)限USER_SYS_PRIVS賦給用戶的系統(tǒng)權(quán)限如何收回系統(tǒng)權(quán)限使用REVOKE收回賦給用戶的權(quán)限通過

WITHGRANTOPTION語句賦出去的權(quán)限也被收回語法REVOKE{privilege[,privilege...]|ALL}ONobjectFROM{user[,user...]|role|PUBLIC}[CASCADECONSTRAINTS];數(shù)據(jù)庫鏈接讓本地用戶可以訪問遠程數(shù)據(jù)庫的一種手段數(shù)據(jù)庫鏈接創(chuàng)立數(shù)據(jù)庫鏈接CREATEPUBLICDATABASELINKpub_dbUSING‘pub_db’;在SQL語句中使用數(shù)據(jù)庫鏈接SELECT*FROMemployee@pub_db;第十三章集合操作目標(biāo)描述集合操作使用集合操作將多個查詢合并為一個查詢控制返回行的順序集合操作并——UNION/UNIONALL交——INTERSECT差——MINUSUNION操作符返回兩個查詢中的所有記錄,但要去除重復(fù)記錄UNIONALL返回兩個查詢的所有記錄,包括重復(fù)行INTERSECT返回同時包含在兩個查詢中的記錄MINUS返回包含在第一個查詢,但不在第二個查詢中的記錄第三局部PL/SQLPL/SQL程序設(shè)計簡介PL/SQL塊結(jié)構(gòu)和組成元素PL/SQL流程控制語句游標(biāo)的使用異常錯誤處理存儲函數(shù)和過程包的創(chuàng)立和應(yīng)用觸發(fā)器一、PL/SQL程序設(shè)計簡介PL/SQL是ProcedureLanguage&StructuredQueryLanguage的縮寫。PL/SQL是對SQL的擴展PL/SQL是第三代編程語言和第四代編程語言的完美結(jié)合。分為數(shù)據(jù)庫PL/SQL和工具PL/SQL,如proCPL/SQL的使用在PL/SQL中只能使用DML語句:

INSERT、UPDATE、DELETE、SELECTINTO、COMMIT、ROLLBACK不能使用DDL語句,為什么?使用范圍SQLPLUS高級語言二、PL/SQL塊結(jié)構(gòu)和組成元素PL/SQL塊PL/SQL結(jié)構(gòu)標(biāo)識符PL/SQL變量類型運算符和表達式(數(shù)據(jù)定義)變量賦值變量作用范圍及可見性注釋簡單例子PL/SQL塊由三局部組成DECLARE/*聲明局部:在此聲明PL/SQL用到的變量,類型及游標(biāo),以及局部的存儲過程和函數(shù)*/BEGIN/*執(zhí)行局部:過程及SQL語句,即程序的主要局部,必須*/EXCEPTION/*執(zhí)行異常局部:錯誤處理*/END;PL/SQL塊的類型無名塊臨時性的語句,以Declare開頭子程序過程,以Createorreplaceprocudue函數(shù),以Createorreplacefunction程序包,CreateorReplacePackage觸發(fā)器createorreplacetrigger一個無名塊的例子SetserveroutputonBegindbms_output.put_line('當(dāng)前時間是'||to_char(sysdate,'yyyy-mm-ddhh24:mi:ss'));End;PL/SQL標(biāo)識符PL/SQL程序設(shè)計中的標(biāo)識符定義與SQL的標(biāo)識符定義的要求相同。要求和限制有:標(biāo)識符名不能超過30字符;第一個字符必須為字母;不分大小寫;不能用’-‘(減號);不能是SQL保存字。提示:不要把變量名聲明與表中字段名完全一樣,如果這樣可能得到不正確的結(jié)果.建議的變量命名規(guī)那么標(biāo)識符命名規(guī)則(前綴)例子參數(shù)變量p_p_table_name程序變量v_v_id游標(biāo)變量c_c_emp異常標(biāo)識e_e_no_data_found記錄類型t_t_studentPL/SQL數(shù)據(jù)類型類型說

明ORACLE限制CHAR定長字符串,默認長度為1,最大長度327672000字節(jié)VARCHAR2可變字符串,最大長度327674000NUMBER(p,s)數(shù)字型,p表示精度最大38,s刻度從-84到127DATE日期型BOOLEAN布爾型不使用ROWID存放數(shù)據(jù)庫行號表類型相當(dāng)于一個記錄類型,結(jié)構(gòu)同某個表列類型類型和某個表的列相同注釋單行注釋以雙減號開頭,--開始注釋多行注釋/*開始注釋第二行注釋結(jié)束注釋*/舉例:在PL/SQL中使用SQL語句直接在beginend之間輸入sql語句在sql語句內(nèi)使用變量在語句后添加commit;或者rollback;三、PL/SQL流程控制語句條件語句CASE表達式循環(huán)標(biāo)號和GOTONULL語句IF語句第一種IF<布爾表達式>THEN PL/SQL和SQL語句ENDIF;第二種IF<布爾表達式>THEN PL/SQL和SQL語句ELSE

其它語句ENDIF;第三種IF<布爾表達式>THEN PL/SQL和SQL語句ELSIF<其它布爾表達式>THEN

其它語句ELSIF<其它布爾表達式>THEN

其它語句ELSE

其它語句ENDIF;CASE語句CASEselector WHENexpression1THENresult1 WHENexpression2THENresult2 WHENexpressionNTHENresultN [ELSEresultN+1]END;相當(dāng)于decode函數(shù)簡單循環(huán)LOOP

要執(zhí)行的語句;EXITWHEN<條件語句>/*條件滿足,退出循環(huán)語句*/ENDLOOP;WHILE循環(huán)WHILE<布爾表達式>LOOP

要執(zhí)行的語句;ENDLOOP;FOR循環(huán)FOR計數(shù)器IN[REVERSE]下限..上限LOOP

要執(zhí)行的語句;ENDLOOP;標(biāo)號和GOTOGOTOlabel;......<<label>>

/*標(biāo)號是用<<

>>括起來的標(biāo)識符*/NULL語句NULL;//什么都不做四、游標(biāo)的使用什么是游標(biāo)?官方解釋:指向上下文區(qū)的句柄或指針。我的解釋:一個指向查詢結(jié)果集的變量,用于對結(jié)果集進行遍歷。分為顯式游標(biāo)和隱式游標(biāo)處理顯式游標(biāo)的步驟聲明游標(biāo)CURSORc_nameISselect_statement;翻開游標(biāo)OPENCURSORc_name;用游標(biāo)檢索值FETCHc_nameINTOv_name;關(guān)閉游標(biāo)CLOSEc_name;游標(biāo)的幾個屬性%FOUND%NOTFOUND%ROWCOUNT隱式游標(biāo)SQL游標(biāo)由PL/SQL引擎翻開或關(guān)閉,所以沒有OPEN等命令具有同樣的游標(biāo)屬性ISOPEN始終為FALSE使用循環(huán)遍歷游標(biāo)簡單循環(huán)LOOPEXITWHENc_name%NOTFOUND/*dosomething*/ENDLOOPWHILE循環(huán)Whilec_name%FOUNDLOOP/*dosomething*/ENDLOOPFOR循環(huán)FORv_nameINc_nameLOOP/*dosomething*/ENDLOOPNO_DATA_FOUND與%NOTFOUND的區(qū)別前者異常 游標(biāo)屬性前者在Selectinto沒有成功是觸發(fā),后者在update或delete沒有匹配where字句時被置為TRUEFORUPDATE自動加行鎖CURRENTOFc_name五、異常錯誤處理異常處理概念異常錯誤傳播異常錯誤處理編程在PL/SQL中使用SQLCODE,SQLERRM異常的定義及分類用來處理正常執(zhí)行過程中未預(yù)料的事件分類預(yù)定義(Predefined)錯誤ORACLE預(yù)定義的異常情況大約有24個。對這種異常情況的處理,無需在程序中定義,由ORACLE自動將其引發(fā)。非預(yù)定義(Predefined)錯誤即其他標(biāo)準(zhǔn)的ORACLE錯誤。對這種異常情況的處理,需要用戶在程序中定義,然后由ORACLE自動將其引發(fā)。用戶定義(User_define)錯誤程序執(zhí)行過程中,出現(xiàn)編程人員認為的非正常情況。對這種異常情況的處理,需要用戶在程序中定義,然后顯式地在程序中將其引發(fā)。異常的結(jié)構(gòu)EXCEPTIONWHENfirst_exceptionTHEN<codetohandlefirstexception>WHENsecond_exceptionTHEN<codetohandlesecondexception>WHENOTHERSTHEN<codetohandleothersexception>END;典型的預(yù)定義異常錯誤號異常錯誤信息名稱說明ORA-1001Invalid-CURSOR試圖使用一個無效的游標(biāo)ORA-1012Not-logged-on沒有連接到ORACLEORA-1017Login-denied無效的用戶名/口令ORA-1403No_data_foundSELECTINTO沒有找到數(shù)據(jù)ORA-1422Too_many_rowsSELECTINTO返回多行ORA-1476Zero-divide試圖被零除ORA-1722Invalid-NUMBER轉(zhuǎn)換一個數(shù)字失敗ORA-6511CURSOR-already-OPEN試圖打開一個已存在的游標(biāo)ORA-6530Access-INTO-null試圖為null對象的屬性賦值非預(yù)定義的異常處理在PL/SQL塊的定義局部定義異常情況:<異常情況>EXCEPTION;將其定義好的異常情況,與標(biāo)準(zhǔn)的ORACLE錯誤聯(lián)系起來,使用EXCEPTION_INIT語句:PRAGMAEXCEPTION_INIT(<異常情況>,<錯誤代碼>);在PL/SQL塊的異常情況處理局部對異常情況做出相應(yīng)的處理。用戶自定義的異常處理在PL/SQL塊的定義局部定義異常情況:<異常情況>EXCEPTION;RAISE<異常情況>;在PL/SQL塊的異常情況處理局部對異常情況做出相應(yīng)的處理。在PL/SQL中使用SQLCODE,SQLERRM

SQLCODE返回錯誤代碼數(shù)字,SQLERRM返回錯誤信息.六、存儲函數(shù)和過程創(chuàng)立函數(shù)存儲過程什么是存儲過程/函數(shù)定義:存儲在數(shù)據(jù)庫中的PL/SQL程序,具有輸入/輸出或輸入輸出參數(shù)〔參數(shù)具有方向性,單入、單出或是雙向〕存儲過程與函數(shù)除了返回結(jié)果有區(qū)別外,其實是一樣的,存儲過程不返回結(jié)果,函數(shù)要返回結(jié)果。函數(shù)的結(jié)構(gòu)CREATE[ORREPLACE]FUNCTIONfunction_name [(argment[{IN|INOUT}]type, argment[{IN|OUT|INOUT}]type)]RETURNreturn_type{IS|AS} <類型.變量的說明>

BEGIN FUNCTION_bodyEXCEPTION

其它語句END;存儲過程結(jié)構(gòu)CREATE[ORREPLACE]PROCEDUREProcedure_name[(argment[{IN|INOUT}]Type,argment[{IN|OUT|INOUT}]Type)]{IS|AS} <類型.變量的說明>BEGIN <執(zhí)行局部>EXCEPTION <可選的異常錯誤處理程序>END;參數(shù)傳遞方法方式說明IN當(dāng)過程被調(diào)用時,實際參數(shù)被傳遞給過程。在過程內(nèi),形式參數(shù)起著PL/SQL常量的作用——它被認為是只讀的,不能被改變。當(dāng)過程結(jié)束,控制返回到調(diào)用環(huán)境時,實際參數(shù)沒有被改變。OUT當(dāng)過程被調(diào)用時,實際參數(shù)的任何值都被忽略。在過程內(nèi),形式參數(shù)起著未初始化的PL/SQL變量

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論