心得共享:Oracle經驗技巧集錦_第1頁
心得共享:Oracle經驗技巧集錦_第2頁
心得共享:Oracle經驗技巧集錦_第3頁
心得共享:Oracle經驗技巧集錦_第4頁
心得共享:Oracle經驗技巧集錦_第5頁
已閱讀5頁,還剩13頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、1刪除表空間DROP TABLESPACE TableSpaceName INCLUDING CONTENTS AND DATAFILES2刪除用戶DROP USSER Usser_Naame CAASCADEE3刪除表的注注意事項在刪除一個表中中的全部數據據時,須使用用TRUNCCATE TTABLE 表名;因為為用DROPP TABLLE,DELLETE * FROMM 表名時,TTABLESSPACE表表空間該表的的占用空間并并未釋放,反反復幾次DRROP,DEELETE操操作后,該TTABLESSPACE上上百兆的空間間就被耗光了了。4havinng子句的用用法having子子句對gr

2、ooup byy子句所確定定的行組進行行控制,haaving子子句條件中只只允許涉及常常量,聚組函函數或grooup byy 子句中的的列。5外部聯接+的用法法外部聯接+按其在=的左邊或或右邊分左聯聯接和右聯接接.若不帶+運算符符的表中的一一個行不直接接匹配于帶+預算符符的表中的任任何行,則前前者的行與后后者中的一個個空行相匹配配并被返回.若二者均不不帶+,則二者中中無法匹配的的均被返回.利用外部聯聯接+,可以替代效效率十分低下下的 nott in 運運算,大大提提高運行速度度.例如,下下面這條命令令執行起來很很慢 用外聯接提高表表連接的查詢詢速度 在作表連接(常常用于視圖)時,常使用用以下方

3、法來來查詢數據: SELECT PAY_NNO, PRROJECTT_NAMEE FROM A WHERE AA.PAY_NO NOOT IN (SELEECT PAAY_ NO FROMM B WHHERE VVALUE =1200000); - 但是是若表A有110000條條記錄,表BB有100000條記錄,則則要用掉300分鐘才能查查完,主要因因為NOT IN要進 行一條一條條的比較,共共需要100000*100000次比比較后,才能能得到結果。該該用外聯接后后,可以縮短短到1分左右右的時間: SELECT PAY_NNO,PROOJECT_NAMEFROM A,B WHERE AA.P

4、AY_NO=B.PAY_NNO(+) AND B.PPAY_NOO IS NNULL AND B.VVALUE =120000; 6set ttransaactionn命令的用法法 在執行大事務時時,有時orracle會會報出如下的的錯誤: ORA-015555:snnapshoot tooo old (rolllback segmeent tooo smaall) 這說明orracle給給此事務隨機機分配的回滾滾段太小了,這時可以為為它指定一個個足夠大的回回滾段,以確確保這個事務務的成功執行行.例如 set traansacttion uuse roollbacck seggment rol

5、l_abc; delete from tablee_namee wherre . commit; 回滾段rooll_abbc被指定給給這個dellete事務務,commmit命令則則在事務結束束之后取消了了回滾段的指指定. 7數據庫重建建應注意的問問題 在利用immport進進行數據庫重重建過程中,有些視圖可可能會帶來問問題,因為結結構輸入的順順序可能造成成視圖的輸入入先于它低層層次表的輸入入,這樣建立立視圖就會失失敗.要解決決這一問題,可采取分兩兩步走的方法法:首先輸入入結構,然后后輸入數據.命令舉例如如下 (ueesrnamme:jfccl,passswordd:hfjff,hostt s

6、tinng:oraa1,數據文文件:exppdata.dmp): imp jfccl/hfjjforaa1 fille=emppdata.dmp rrows=NN imp jfccl/hfjjforaa1 fille=emppdata.dmp ffull=YY bufffer=644000 commit=Y ignnore=YY 第一條命令令輸入所有數數據庫結構,但無記錄.第二次輸入入結構和數據據,640000字節提交交一次.iggnore=Y選項保證證第二次輸入入既使對象存存在的情況下下也能成功. select a.emppno frrom emmp a wwhere a.emppno no

7、ot in (seleect emmpno ffrom eemp1 wwhere job=SALE); 倘若利用外外部聯接,改改寫命令如下下: select a.emppno frrom emmp a ,emp1 b where aa.empnno=b.eempno(+) and b.eempno is nuull and b.jjob=SSALE; 可以發現,運行行速度明顯提提高. 8從已知表新新建另一個表表:CREATE TABLEE b AS SELEECT * (可以是表表a中的幾列列) FROM a WHERE aa.coluumn = .; 9查找、刪除除重復記錄: 法一: 用Gr

8、roup bby語句 此此查找很快的的select countt(num), maxx(namee) froom stuudent -查找表表中num列列重復的,列列出重復的記記錄數,并列列出他的naame屬性group bby numm having countt(num) 1 -按numm分組后找出出表中numm列重復,即即出現次數大大于一次delete from studeent(上面面Selecct的) 這樣的話就把所所有重復的都都刪除了。-慎慎重 法二:當表比較較大(例如110萬條以上上)時,這個個方法的效率率之差令人無無法忍受,需需要另想辦法法: - 執行行下面SQLL語句后就可可

9、以顯示所有有DRAWIING和DSSNO相同且且重復的記錄錄 SELECT * FROOM EM55_PIPEE_PREFFAB WHERE RROWID!=(SELLECT MMAX(ROOWID) FROM EM5_PPIPE_PPREFABB D -D相當于FFirst,Seconnd WHERE EEM5_PIIPE_PRREFAB.DRAWIING=D.DRAWIING ANND EM5_PIPPE_PREEFAB.DDSNO=DD.DSNOO); - 執行行下面SQLL語句后就可可以刪除所有有DRAWIING和DSSNO相同且且重復的記錄錄 DELETE FROM EM5_PPIP

10、E_PPREFABB WHERE RROWID!=(SELLECT MMAX(ROOWID) FROM EM5_PPIPE_PPREFABB D WHERE EEM5_PIIPE_PRREFAB.DRAWIING=D.DRAWIING ANND EM5_PIPPE_PREEFAB.DDSNO=DD.DSNOO); 10返回表中中N,M條記錄: 取得某列中第NN大的行 select colummn_namme froom (selectt tablle_namme.*,ddense_rank() oveer (orrder bby collumn ddesc) rank from tablee_

11、namee) where rrank = &N; 假如要返回前前5條記錄: selecct * ffrom ttablenname wwhere rownuum6;(或是rowwnum = 5 或或是rownnum != 6) 假如要返回第55-9條記錄錄: select * froom tabblenamme where and rowwnum110 minus select * froom tabblenamme where and rowwnum55 order bby namme 選出結果后用nname排序序顯示結果。(先選再排序序) 注意:只能用以以上符號(、,=,=,BBetwee

12、en.aand。由于于rownuum是一個總總是從1開始始的偽列,OOraclee 認為這種種條件 不成成立,查不到到記錄. 另外,這個方法法更快: select * froom ( select rownuum r,aa fromm yourrtablee where rrownumm 100 這樣取出第111-20條記記錄!(先選選再排序再選選) 要先排序再選則則須用sellect嵌套套:內層排序序外層選。 rownum是是隨著結果集集生成的,一一旦生成,就就不會變化了了;同時,生生成的結果是是依次遞加的的,沒有1就就永遠不會有有2! rownum 是在 查詢詢集合產生的的過程中產生生的偽

13、列,并并且如果whhere條件件中存在 rrownumm 條件的話話,則: 1: 假如 判判定條件是常常量,則: 只能 rownnum = 1, SPPOOL OON.SQLL SQL SEELECT ALTEER VIEEW |TNAMEE| COMPILEE; FRROM TAAB; SQL SPPOOL OOFF 然后執行ON.SQL即可可。 SQL OON.SQLL 當然,授權和創創建同義詞也也可以快速進進行,如: SQL SEELECT GRANNT SELLECT OON |TNAMEE| TTO USEERNAMEE; FRROM TAAB; SQL SEELECT CREAAT

14、E SYYNONYMM |TNAMME| FOR UUSERNAAME.|TNAMME|; FROOM TABB; 12讀寫文本本型操作系統統文件- 在PPL/SQLL 3.3以以上的版本中中,UTL_FILE包包允許用戶通通過PL/SSQL讀寫操操作系統文件件。如下: DECALREE FILE_HAANDLE UTL_FFILE.FFILE_TTYPE; BEGIN FILE_HAANDLE:=UTL_FILE.FOPENN( C:,TEST.TXT,A); UTL_FILLE.PUTT_LINEE(FILEE_HANDDLE,HELLO,IITS AA TESTT TXT FILE);

15、UTL_FILLE.FCLLOSE(FFILE_HHANDLEE); END; 13在數據庫庫觸發器中使使用列的新值值與舊值 - 在數數據庫觸發器器中幾乎總是是要使用觸發發器基表的列列值,如果某某條語句需要要某列修改前前的值,使用用:OLD就就可以了,使使用某列修改改后的新值,用用:NEW就就可以了。如如:OLD.DEPT_NO,:NNEW.DEEPT_NOO。 14數據庫文文件的移動方方法 當想將數據庫文文件移動到另另外一個目錄錄下時,可以以用ALTEER DATTABASEE命令來移動動(比ALTTER TAABLESPPACE適用用性強): 1. 使用SEERVER MANAGGER關閉

16、實實例. SVRMGR connnect interrnal; SVRMGR shuutdownn; SVRMGR exitt; 2. 使用操作作系統命令來來移動數據庫庫文件位置(假設這里操操作系統為SSOLARIIS 2.66). 在UUNIX中用用 mv命令令可以把文件件移動到新的的位置, #mv /orra13/oorarunn/docuument.dbf /ora122/orarrun 3. 裝載數據據庫并用allter ddatabaase命令來來改變數據庫庫中的文件名名. SVRMGR connnect interrnal; SVRMGR staartup mountt RUN77

17、3; SVRMGR altter daatabasse renname ffile / orra13/oorarunn/docuument.dbf / orra12/oorarunn/docuument.dbf; 4. 啟動實例例. SVRMGR altter daatabasse opeen; 15連接查詢詢結果: 表a 列 a11 a2 記錄 1 a 1 b 2 x 2 y 2 z 用selectt能選成以下下結果: 1 ab 2 xyz 下面有兩個例子子: 1.使用pl/sql代碼碼實現,但要要求你組合后后的長度不能能超出oraacle vvarchaar2長度的的限制 create o

18、r reeplacee typee striings_ttable is taable oof varrchar22(20); / create or reeplacee funcction mergee (pv in sttringss_tablle) reeturn varchhar2 is ls varcchar2(4000); begin for i iin 1.pv.coount lloop ls := lls | pv(i); end looop; return ls; end; / create tablee t (iid nummber,nname vvarchaar2(100

19、); insert into t vallues(11,Joaan); insert into t vallues(11,Jacck); insert into t vallues(11,Tomm); insert into t vallues(22,Rosse); insert into t vallues(22,Jennny); column namess formmat a880; select t0.idd,mergge(casst(mulltisett(seleect naame frrom t wheree t.idd = t00.id) as sttringss_tablle)

20、nnames from (sselectt disttinct id frrom t) t0; drop tyype sttringss_tablle; drop fuunctioon merrge; drop taable tt; 2.純粹用sqql: 表dept, emp 要得到如下結果果 deptno, dnamme, emmployeees - 10, acccountiing, cclark;king;milleer 20, ressearchh, smiith;addams;fford;sscott;joness 30, salles, aallen;blakee;marttin;

21、jaames;tturnerrs 每個dept的的emplooyee串起起來作為一條條記錄返回 This exxamplee usess a maax of 6, annd wouuld neeed moore cuut n ppastinng to do moore thhan thhat: SQL seelect deptnno, dnname, emps 2 from ( 3 selecct d.ddeptnoo, d.ddname, rtriim(e.eename |, | 4 lead(e.enaame,1) overr (parrtitioon by d.depptno 5 ord

22、err by ee.enamme) |, | 6 lead(e.enaame,2) overr (parrtitioon by d.depptno 7 orderr by ee.enamme) |, | 8 lead(e.enaame,3) overr (parrtitioon by d.depptno 9 orderr by ee.enamme) |, | 10 leadd(e.enname,44) oveer (paartitiion byy d.deeptno 11 ordeer by e.enaame) |, | 12 leadd(e.enname,55) oveer (paartit

23、iion byy d.deeptno 13 ordeer by e.enaame), ) emps, 14 row_numbeer () over (parttitionn by dd.depttno 15 ordeer by e.enaame) xx 16 fromm emp e, deept d 17 wherre d.ddeptnoo = e.deptnno 18 ) 19 wherre x = 1 20 / DEPTNO DNAMEE EMPSS - - - 10 ACCOOUNTINNG CLAARK, KKING, MILLEER 20 RESEEARCH ADAMSS, FORR

24、D, JOONES, ROONEEY, SCCOTT, SMITHH 30 SALEES ALLLEN, BBLAKE, JAMEES, MAARTIN, TURNNER, WWARD 16在Oraacle中建建一個編號會會自動增加的的字段,以利利于查詢 1、建立序列: CREATE SEQUEENCE ccheckuup_no_seq NOCYCLEE MAXVALUUE 999999999999 START WWITH 22; 2、建立觸發器器: CREATE OR REEPLACEE TRIGGGER sset_chheckupp_no BEFORE INSERRT ON checkkup_hiistoryy FOR EACCH ROWW DECLAREE next_chheckupp_no NNUMBERR; BEGIN -Get tthe neext chheckupp numbber frrom thhe se

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論