筆記oracle實(shí)戰(zhàn)詳解ORACLE數(shù)據(jù)庫系統(tǒng)是甲骨文提供的以分布式_第1頁
筆記oracle實(shí)戰(zhàn)詳解ORACLE數(shù)據(jù)庫系統(tǒng)是甲骨文提供的以分布式_第2頁
筆記oracle實(shí)戰(zhàn)詳解ORACLE數(shù)據(jù)庫系統(tǒng)是甲骨文提供的以分布式_第3頁
筆記oracle實(shí)戰(zhàn)詳解ORACLE數(shù)據(jù)庫系統(tǒng)是甲骨文提供的以分布式_第4頁
筆記oracle實(shí)戰(zhàn)詳解ORACLE數(shù)據(jù)庫系統(tǒng)是甲骨文提供的以分布式_第5頁
已閱讀5頁,還剩66頁未讀 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡介

oracleORACLE數(shù)據(jù)庫系統(tǒng)是ORACLE公司(甲骨文)提供的以分布式數(shù)據(jù)庫為的一組軟件產(chǎn)品,是目前最流行的客戶/服務(wù)器(/SERVER)或B/S體系結(jié)構(gòu)的數(shù)據(jù)庫之一。SilverStream就是基于數(shù)據(jù)庫的一種中間件。ORACLE數(shù)據(jù)庫是目前世界上使用最為廣ORACLE知識(shí),便能在各種類型的機(jī)器上使用它。oracle10g解壓oracle數(shù)據(jù)庫安裝包如果是win7或者win8系統(tǒng)setup.exe選擇兼容性,xp方式,并且以管理員方式運(yùn)行,以及其他所有用戶都按著此規(guī)則如圖并雙擊解 輸令和確認(rèn)口令,如:password,點(diǎn)擊下一步,出現(xiàn)如下進(jìn)度條,注:此口令即是管理員。將SCOTT和HR用戶的溝去掉(這兩個(gè)賬戶,如下圖所示,點(diǎn)擊“確定PLSQLDeveloper傻瓜式安裝即可,不建議漢化,最后會(huì)提示輸入序列號(hào),打開plsql-sn.txt序列號(hào),輸入即可。重要提示:plsqldeveloper安裝在有括號(hào)的 Plsqldeveloper是最好用也是公司里面大量使用的數(shù)據(jù)庫圖形化工具,功能十分強(qiáng)大,在開發(fā)人員中廣受歡迎,基本上是使用oracle數(shù)據(jù)庫的必備。Oracle支持命令行方PlsqldeveloperPowerDesignerPowerDesigner是數(shù)據(jù)庫模型設(shè)計(jì)的工具,功能十分強(qiáng)大,不僅能設(shè)計(jì)數(shù)據(jù)庫模型,還能設(shè)UML建模的圖形。oracleOracle就只有一個(gè)大數(shù)據(jù)庫。system(datafile)數(shù)據(jù)文件是數(shù)據(jù)庫的物理單位。數(shù)據(jù)庫的數(shù)據(jù)是在表空間中 oracle,oraclecmdSqlplus用戶名/[as如果是超級管理員需要在用戶名/后面加上assysdba,是以系統(tǒng)管理員的來asshowuser在登錄的狀態(tài)下輸入:conn用戶名/[asSetlinesize300;300Col列名for 在用戶登錄的情況下輸入:select*fromColenamefora8Colmgrfor9999Colsalfor9999Select*fromdbasysempScottselect*from用戶名].[表名]DescNumber(4)4Varchar2(10)最大長度為10的字符串,varchar2用于可變長度的字符串,.varchar2oraclevarchar2Number(7,2)527 Scottsql結(jié)構(gòu)化查詢語言(StructuredQueryLanguage)SQL(發(fā)音:/??skju??l/S-Q-L"),結(jié)構(gòu)化允許用戶在數(shù)據(jù)結(jié)構(gòu)上工作。它不要求用戶指定對數(shù)據(jù)的存放方法,也不需要用戶了解具體的數(shù)據(jù)存放方式,所以具有完全不同底層結(jié)構(gòu)的不同數(shù)據(jù)庫系統(tǒng),可以使用相同的結(jié)構(gòu)DML(數(shù)據(jù)庫操作語言):INSERT,UPDATEDELETE。它們分別用于添DDL(數(shù)據(jù)庫定義語言):CREATEDROP。在數(shù)據(jù)庫中創(chuàng)建新表或刪除表(CREATTABLEDROPTABLE;為表加入索引等。DDL包括許多與人數(shù)據(jù)庫中DCL(數(shù)據(jù)庫控制語言):它的語句通過GRANT或REVOKE獲得,確定單個(gè)用戶和用戶組對數(shù)據(jù)庫對象的。某些RDBMS可用GRANT或REVOKE控制對表單個(gè)列的。Select*|from fromSelectdistinct*|列名fromdistinct查詢雇員編號(hào),,工編號(hào)是:7369的雇員,是:smith,工作是Selectename,sal*12fromSelectename, efromSql中支持四則運(yùn)算“+,-語法:select*|fromwhere條件1500的所有雇員語法:列名ISNOTNULL為空IS1500并且有獎(jiǎng)金領(lǐng)取的雇員范例:15001500和沒有獎(jiǎng)金的人15003000的全部雇員分析:sal>1500,sal<3000 andsal1500andsal1981-1-11981-12-31分析:betweenandsmithoracle范例:7369,7499,7521的雇員編號(hào)的具體信息OR關(guān)鍵字實(shí)際上,此時(shí)指定了查詢范圍,那么sql可以使用IN關(guān)鍵字語法:列名IN(值1,值2, 列名NOTIN(值1,值 sqlLIKE語句完成。LIKE中主要使用以下兩種通配符“%范例:查詢出所有雇員中第二個(gè)字符包含“M”的雇LIKE查詢名字中帶有“Moracle中不等號(hào)的用法可以有兩種形式“<>”和“!=”7369的雇員信息sqlORDERBY語法:SELECT*|列名FROM表名{WEHRE查詢條件}ORDERBY列名1ASC|DESC,列名DESCORDERBYsqlconcat可以使用“|| o',字符串的截取,使用10 o', re o',ROUNDOracle中提供了很多和日期相關(guān)的函數(shù),包括日期的加減,在日期加減時(shí)有一些規(guī)律日期–數(shù)字=日期+=日期日期–=分析:查詢雇員進(jìn)入公司的天數(shù)(sysdate–入職日期)/7年:y,yyyy月:m,mm日:d,10fmTO_CHAR范例:把雇員的工資按三位用“,oracle中“9如果在錢的前面加上國家的符號(hào)可以使用“$”代表是,如果要使用本地的錢的單位使TO_NUMBER可以把字符串轉(zhuǎn)換成數(shù)值空值處理null,nullnullnvlDecode Result1 col/expressionSearchiresulti,defaultcaseCASEexprWHENcomparison_expr1THENreturn_expr1[WHENcomparison_expr2THENreturn_expr2WHENcomparison_exprnTHENreturn_exprnELSEelse_expr]selectwhent.job'CLERKthenwhent.job='MANAGER'whent.job=' YSTthenwhent.job= ''whent.job'SALESMANthenfromemp語法 SELECT{DISTINCT}*|列名..FROM表名別名,表名1別{WHEREORDERBY56emp16條,dept4條,56正是emp表和dept表的記錄數(shù)的乘積,我們稱其為積。如果多進(jìn)行一起查詢而且每的數(shù)據(jù)很大的話積就會(huì)變得非常大,對性能造成影響,想要去掉積我們需要關(guān)聯(lián)查詢。在兩中我們發(fā)現(xiàn)有一個(gè)共同的字段是depno,depno就是兩的關(guān)聯(lián)的字段,我們可以使用這個(gè)字段來做限制條件,兩的關(guān)聯(lián)查詢字段一般是其中一的主鍵,另一的外鍵。1456條。多表查詢我們可以為每一起一個(gè)別名范例:查詢出雇員的編號(hào),,部門的編號(hào)和名稱,地范例:查詢出每個(gè)員工的上級分析:emp表中的mgr字段是當(dāng)前雇員的上級的編號(hào),所以該字段對emp表產(chǎn)生mgrempno來關(guān)聯(lián)范例:分析:只要在上一個(gè)例子基礎(chǔ)上再加一的關(guān)聯(lián),使用deptno來做關(guān)聯(lián)字段即范例:查詢出每個(gè)員工編號(hào),,部門名稱,工資等級和他的上級的,工資select5,'五級grade,5,'五級fromempe,empe1,deptd,salgrades,salgrades1wheree.mgr=e1.empnoande.deptno=ande.salbetweens.losalandande1.salbetweens1.losaland范例:查詢出所有員工的上級sql1999SQL 交叉連接會(huì)產(chǎn)生自然連接會(huì)自動(dòng)的分析管理?xiàng)l件進(jìn)行連接,去掉積On20GROUPBY語法語法:SELECT*|列名FROM表名{WEHRE查詢條件} {GROUPBY分組字段}ORDERBY列名1ASC|DESC,列名2...ASC|DESCORA-00937的錯(cuò)誤如果使用分組函數(shù),SQLGOURPBY分組條件字段和分組函數(shù)查詢出來,GROUPBY5分析:需要給count(ename)加條件,此時(shí)在本查詢中不能使用where,可以使用20005000,結(jié)果按月工資總和的升序排列。125000Sql7654765476547788在返回多條記錄的子查詢可以把它的結(jié)果集當(dāng)做一,給起個(gè)別名,如圖中的a。Existsnotexistsexists(sqlnotexists(sqlUnionUnionAllUnionAll8為了保存原始emp的信息保存,我們一份emp tablemyempasselect*from 簡單寫法(不建議 INTOVALUES(1insertintomyempvalues(7789,'','開發(fā)',7839,to_date('1992-10-22','yyyy-MM-dd'),2000,200,10);insertintomyempvalues(7790,'','開發(fā)',null,to_date('1992-10-22','yyyy-MM-dd'),2000,null,10);全部修改:UPDATESET1=12=局部修改:UPDATESET1=12=2,....WHERE修改條件;把的取語法:DELETEFROM表名 刪除條件7934因?yàn)閛racle的事務(wù)對數(shù)據(jù)庫的變更的處理,須做提交事務(wù)才能讓數(shù)據(jù)真正的插入到oracle中會(huì)數(shù)據(jù)庫變更會(huì)發(fā)生鎖的情況(此處應(yīng)用可以解決項(xiàng)目多線程并發(fā)帶來的數(shù)據(jù)1Varchar,2nm-3452Createtable表名字段1 [default默認(rèn)值],字段 數(shù)據(jù)類 [default默認(rèn)值字段 數(shù)據(jù)類 [default默認(rèn)值范例:創(chuàng)建createtable number(1)default1,birthdaydateinsertinto(pid,name,gender,values(1,'',1,to_date('1999-12-22','yyyy-MM-語法:DROPTABLEsqlalter添加語法:ALTERTABLEADD(1[DEFAULT默認(rèn)值]1默認(rèn)值修改語法:ALTERTABLE表名稱MODIFY(列名1類型[DEFAULT默認(rèn)值],列名1類型[DEFAULT默認(rèn)值200200的列范例:在表中增加列addressaltertableadd(address范例:把表的address列的長度修改成20長altertablemodify(address 語法:TRUNCATETABLE范例:截?cái)鄑runcatetableid上使用,而且本身已經(jīng)默認(rèn)了內(nèi)容不能為空,可以在建表的時(shí)候指定。創(chuàng)建一,把pid作為主鍵createtable number(10)primarykey, varchar2(10), number(1)defaultbirthday主鍵不可重復(fù), 是系統(tǒng)自動(dòng)分配的約束的名create number(1)default1,birthdaydate, _pk_pidprimary范例:建立一張pid和name不可以為空的表createtable number(10)notnull, varchar2(10)notnull, number(1),birthday范例:建表一個(gè)name是唯一的表createtable number(10) varchar2(10)unique, number(1),birthdaydatecreate number(10), number(1),birthdaydate, _name_uk范例:創(chuàng)建一只能是1或2createtable number(10), number(1)check(genderin(1,2)),birthdaydatecreate number(10), birthdaydate, _gender_ckcheck(genderin之前所講的都是單表的約束,外鍵是兩的約束,可以保證關(guān)聯(lián)數(shù)據(jù)的完整性。范例:創(chuàng)建兩,一張訂單表,一張是訂單明細(xì)表,訂單和明細(xì)是一對多的關(guān)系createtableorders( number(10), order_timedate,constraintorders_order_id_pkprimarycreatetableorder_detail( number(10), item_namevarchar2(10),tynumber(10),constraintorder_detail_detail_id_pkprimaryinsertintoordersvalues(1,200,to_date('2015-12-insertintoorder_detailvalues(1,2,我們在兩中插入如上兩條數(shù)據(jù),我們發(fā)現(xiàn)在order_detail表中插入的order_id在createtable number(10), order_timedate,constraintorders_order_id_pkprimarycreatetableorder_detail( number(10), item_namevarchar2(10),tynumber(10),constraintorder_detail_detail_id_pkprimaryconstraintorder_detail_order_id_fkforeignkey(order_id)referencesorders(order_id)droptableorderscascadeconstraint;(不建議ondeletecascade如constraintorder_detail_order_id_fkforeignkey(order_id)referencesorders(order_id)ondeletecascadeemprownumselectrownum,t.*fromemprownum5 selectfrom(selectrownumrm,a.*from(select*fromemp)awhererownum<11)bwhereb.rm>51.:CREATEVIEWAS20createviewempvd20asselect*fromemptwhere=20 CEVIEW視圖名稱AS子查2來創(chuàng)建視圖,這樣已有的視圖會(huì)被覆蓋。createorreceviewempvd20asselect*fromemptwheret.deptno=20 CEVIEW視圖名稱AS子查詢WITHREADcreateorreceviewempvd20asselect*fromemptwheret.deptno=20withreadonly在很多數(shù)據(jù)庫中都存在一個(gè)自動(dòng)增長的列,oracle中完成自動(dòng)增長的功能,則只能依靠序列完成,所有的自動(dòng)增長操作,需要用戶手工完成處理。語法:CREATESEQUENCE[INCREMENTBYn][STARTWITHn][{CACHE范例:創(chuàng)建一個(gè) id的序列,驗(yàn)證自動(dòng)增長的操CREATESEQUENCEseqCurrVal:取得序列的當(dāng)前內(nèi)容selectseqid.nextvalfromdual;selectseqid.currvalfromdual;在實(shí)際項(xiàng)目中每一會(huì)配一個(gè)序列,但是表和序列是沒有必然的聯(lián)系的,一個(gè)序列被哪一使用都可以,但是我們一般都是一用一個(gè)序列。15i/o次數(shù),從而提高數(shù)據(jù)性能。索引有很多種我們主要介紹常用的幾種:館:如果雜亂地放書的話檢索起來就非常,所以將書分類,然后再建一個(gè)箱子,箱子里面放卡片,卡片里面可以按類查詢,按查或者類別查,這樣的話速度會(huì)快很多很多,該有人專門來索引,索引是要有時(shí)間精力的開銷的,也就是說索引是不能亂建的,單例索引是基于單個(gè)列所建立的索引,比如CREATEindex索引 on表名(列名復(fù)合索引是基于兩個(gè)列或多個(gè)列的索引。在同一上可以有多個(gè)索引,但是Createindexemp_idx1onemp(ename,job);Createindexemp_idx1on范例: 表的name建立索createindexpname_index 范例: 表創(chuàng)建一個(gè)name和gender的索 where4PLSQLOraclesqlSQL命令語言中增加了過程處理語PLSQL面向過程但比過程語言簡單、高Updateempsetsal=sal*1.1范例2:例2:按職工的長工資,長1000元,經(jīng)理長800元,其他人員長SQL來實(shí)現(xiàn),需要借助其他程序來幫助完成,也可pl/sql。pl/sql

(變量說明,游標(biāo)申明,例外說明〕 (DML語句〕…在程序的階段可以來定義常量和變量變量的基本類型就是oracle中的建表時(shí)字段的變量如char,varchar2,date,number,boolean,long),定義語法 my_nameempename列的類型一樣sqlinto來賦值emprecemp.ename%type;selectt.enameintoemprecfromemptwheret.empno=7369; pemp%rowtype;select*intopfromemptwheret.empno=7369;dbms_output.put_line(p.ename||''||p.sal);if 條件THENEND 條件THEN 語句序列2; 條件THEN語句 語句THEN 11pnumnumber:=#ifpnum=1thenend211mynumnumber:=ifmynum=1thenendif;范例3:判斷人的不同段18歲以下是未成年人,18歲以上40以下是成年人,40以上是mynumnumber:=#ifmynum<18thenelsifmynum>=18andmynum<40elsifmynum>=40thenendif;LOOP2比較常用1: <= ..total:=total+ EXIT End 1.. LOOP范例:1110stepnumber:=1;whilestep<=10loopstep:=step+1;endloop;范例:2110stepnumber:=1;exitwhenstep>10;step:=step+1;endloop;范例:3110stepnumber:=1;forstepin1..10loopendloop; 游標(biāo)名[(參數(shù)名數(shù)據(jù)類型,參數(shù)名數(shù)據(jù)類型,...)] 例如:cursorc1isselectenamefromemp;打開游標(biāo) open 取一行游標(biāo)的值:fetchc1intopjob取一行到變量中關(guān)閉游標(biāo) 游標(biāo)的結(jié)束方 exitwhenpjobempjob列類型一致:定義:pjobemp.empjob%type;1empcursorpcisselect*fromemp;pempemp%rowtype;openpc;fetchpcintopemp;exitwhendbms_output.put_line(pemp.empno||''||pemp.ename);endloop;closepc;范例2:按員工的工種長工資,1000元,經(jīng)理長800元其,他人員長400元cursorpcisselect*frommyemp;addsalmyemp.sal%type;pempmyemp%rowtype;openpc;fetchpcintopemp;exitwhenifpemp.job=''thenaddsal:=1000;elsifpemp.job='MANAGER'thenaddsal:=800;addsal:=400;endif;updatemyemptsett.sal=t.sal+addsalwheret.empno=pemp.empno;endloop;close3PL/SQL10cursorpc(dnomyemp.deptno%type)selectempnofrommyempwheredeptno=dno;pnomyemp.empno%type;openpc(20);fetchpcintopno;exitwhenupdatemyemptsett.sal=t.sal+1000where=endloop;close (select…into語句匹配多個(gè)行) (被零除) (算術(shù)或轉(zhuǎn)換錯(cuò)誤 10plsqlpnumnumber;pnum:=1/0;whenzero_dividethenwhenvalue_errorwhenothersthen用戶也可以自定義例外,在中來定義例 cursorc1isselectdistinctjobfrom orderbyraise50no_emp_foundexception;cursorpempisselectt.enamefromemptwheret.deptno=50;penameemp.ename%type;openpemp;fetchintoifpemp%notfoundthenraiseno_emp_found;endif;closepemp;whenno_emp_foundthenwhenothers過程(StoredProcedure)SQL創(chuàng)建過程語法create[orrece]PROCEDURE過程名[(參數(shù)名in/out數(shù)據(jù)類型)]PLSQLcreate[orrece]PROCEDURE過程名[(參數(shù)名in/out數(shù)據(jù)類型)]PLSQL 范例:創(chuàng)建一個(gè)輸 oword的過createorre ceprocedureoworldisend調(diào)用過在plsql中調(diào)用過--Callthe2100工資,并打印出漲前和漲后的工資createorreceprocedureaddSal1(enoinnumber)pempmyemp%rowtype;select*intopempfrommyempwhereempno=eno;updatemyempsetsal=sal+100whereempno=eno;dbms_output.put_line('漲工資前||pemp.sal||漲工資后||(pemp.sal+100));endaddSal1;--Calltheprocedureaddsal1(eno=>7902);createorrecefunction函數(shù)名(Nameintype,Nameintype,...)return數(shù)據(jù)類型;end函數(shù)名;過程和函數(shù)的區(qū)outout參數(shù),范例:使 函數(shù)來查詢指定員工的年createorre cefunction e(enoinemp.empno%type)returnnumberispsalemp.sal%type; selectt.salintopsalfromemptwheret.empno=eno;returnpsal*12+nvl(pcomm,0);使用過程來替換上面的例createorreceprocedure ep(enoin eoutnumber)ispsalemp.sal%type; selectt.sal, mintopsal,pcommfromemptwheret.empno=eno;e:=psal*12+nvl(pcomm,

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論