管理信息化ORACLEOracle自學自學筆記_第1頁
管理信息化ORACLEOracle自學自學筆記_第2頁
管理信息化ORACLEOracle自學自學筆記_第3頁
管理信息化ORACLEOracle自學自學筆記_第4頁
管理信息化ORACLEOracle自學自學筆記_第5頁
已閱讀5頁,還剩71頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

學筆記OracleInstallationProducts、集成管理工具、配置和移植工具(管理員用得比較多)當啟動sqlplus時會提示輸入用戶名和口令,所謂的sqlplus是Oracle的一個客戶端。當然也可以安裝特定的客戶端軟件實現。說實在的Oracle的這個客戶端太難看了,并且要記好多好多的命令,所以專門有一類公司聲卡的話,你啟動一次它就叫一次。對我們來說sqlplus以超級管理員身份鏈接數據庫的方法是再命令行下敲入命令:sqlplussys/口令assysdba。的用到一個學一個,沒必要從頭到尾的去學它。么叫第四代語言,因為我們知道第三代語言也得有ifelsefor等這些流程控制語句,也就是事務控制語句[transactioncontrolstatement]。語句肯定會考這條select語句不是別的。你跟別人交流的時候,別說我寫過幾條d而因詳細的說到底是什么語句,比如insert語句、upda數據拿出來,展現出來。聽起來似乎挺簡單的,但你要從表里拿數據得首先知道有幾張表,每張表里有些什么內容。第一步要做的就是熟悉一下實驗用的數據,這些數據Oracle都給自帶了,直接用就行了。以上簡要的介紹了三張表,如果想更詳細的了解里面的數據,教大家第一個select語句:各張表之間的關系,以及表內部各字段之間的關系,越熟悉越好。如果要算純數據,可以采用dual這張表,它就一條記錄,一個字段。你如果用其他表計算最后的結果都是空值。就可以正確顯示了。關鍵字distinct是指選擇不重復的記錄,如果修飾多個字段時表示選擇該多個字段的組合來。處理。模糊查詢是這樣的,比如找出名字里含有al的,有點像正則表達式。使用關鍵字like,可串。這幾個函數都是對字符串進行操作的,傳遞進去的參數就是字段名。如selectchr(86)fromdual;將86代表的字符顯示出來,與之對應的是將一個字符轉為對應的ASCII碼,叫ascii,如:selectascii(‘A’)fromdual;就是將A的碼值顯示出來。函數最好記住它。to_char是將字段內容顯示為字符,可以對顯如selectto_char(sal,'$99,999,999.9999')fromemp;就是以后面給定字符形式顯示出來,進行格式控制。格式的。實際上對日期的格式控制是利用Java來實現的,到時會有一個關于日期處理的專題。組函數一個都不能忘,很重要。selectcount(distinctdeptno)fromemp;找出各個單獨的部門一共有多少個,distinct可以修飾字段。當要將各個組中的記錄分別取出然后再計算比如平均值等要采用groupby+字段。比如:不唯一匹配導致。select語句一定要非常熟悉,如果這都要查書的話對企業就沒法交代了,哈哈!子查詢因為再一個select語句里套了另外一個select語句。理解子查詢的關鍵是把它當成一張表,可以對它做表連接最后就可以求出想要的結果來。單獨的select語句相當簡單,(=t.max_salandt.deptno=);這個語句的作用是求出每個的經理人。為同一張表起不同的別名然后當成兩張表來用。鏈接的時候有一個簡便的寫法using(deptno)代替on(=)但不推薦使用,因它的限制條件很多,可能報出來的錯誤很難找并且看起來也不是很清楚。的拿出來Join前加上right即可;如果兩邊多余的都想拿出來Join前加上full叫全外連接。接<,這樣表中的最大值就會連接不上,然后再從emp表中找出未連接上的最大值,如下:selectsalfromempwheresalnotin(select);。使得程序簡潔了,但要注意最多只能兩層嵌套,第一層可能有多個輸出(分組時第二層一定只能有一個輸出,接下來就不能再嵌套了,一個輸入不能作為組函數的參數。join()));鍵入命令grantcreatetable,createviewtoscott;然后以scott登錄就可以了。創建視圖時,名。;用再取去比較了,但實際中不好說因為有可能Oracle在執行的時候做了優化,自動將數字現在已經講完了select語句,接下來講dml語句,常見的有三條,他們和select語句合稱接下來簡單介紹一下Oracle的邏輯結構。安裝的時候創建了一個全局數據庫,同時為這個\test進入該目錄后執行del*.*刪除所有,然后鍵入命令exp后提示輸入用戶名和口令,就個小區域填滿了再統一拿到硬盤上來)一路回車就行,等著它導完就可以了;3.創建新用戶相應權限grantcreateses里完成。insertinto+表名+values(各字段值在對這些數據進行操作時最好有一個備份,方法很簡單rollback回退操作,createtable表名asselect*from+欲備份表名;insert語句還有一種插入方法,insertintodept2(deptno,loc)values(50,'beijing');只是插入部分字段的值,其他字段的值為null,還有一種方法是insertintodept2select*fromdept;將select子句選出的記錄挨個插入前提是選出的記錄與該表的記錄格式相同。selectename,sal,rfrom););1.找出沒選過“黎明”老師課程的所有學生姓名;‘liming’;nt(*)>=2);語句提交結束事務;當正常退出exit時提交結束事務,不正常退出時(如斷電)自動回滾結束事務。庫里。創建一張表存放學生數據如:createtablestu();sex取數字來表示更節省空間,入學時日期加個s避免和關鍵字沖突,可以為某些字段指定默認值當插入記錄時沒有對該字段賦新值就以該默認值,其他沒有默認值為null。復,比如學生學號。E-mail做主鍵不好因為它可以為null,同時索引的時候數字比字符串constraintstu_id_pkprimarykey(id),主鍵也可以是多個字段組合。外鍵約束建立在一張表的兩個字段上或者是兩張表的兩個字段上,是比較麻煩的一種約束。classnumber(2)referencesclass(id),參考class這張表的id字段,當然也可以加在表級上:constraintforeignkey(class)referencesclass(id),。注意在寫外鍵約束的時候,stu束條件。還可以修改字段的數據類型,如果里面已經有數據修改的后果應不影響原來存的記錄值。在Oracle里面看當前用戶下有哪些表,哪些約束,哪些視圖等等這些信息被單獨地裝在一張表里面,稱作數據字典表。user_tables里面裝的是當前用戶共有多少張表,里面字段可總是背著個小本本的原因,你要背是不可能的。索引就相當于字典里的索引一樣,它在Oracle里相當于一種新的數據庫對象,建立索引的方法createindexidx_stu_emilonstu(email);也可以在字段組合上建立索引,以后在查詢組合時效率就高,刪除索引同刪除表方法類似。忘了自己有哪些索引可以采用一點不要輕易建立索引,除非覺得訪問量特別大時。少等等。我可以建立一個視圖里面只包含我想要給他看的內容。序列是Oracle數據庫獨有的東西,它產生一個唯一、不間斷的序列,作用是一般做主鍵。createtablearticle(titlevarchar2(1024),);如果要加入一篇文章,采用這種做法selectmax(id)fromarticle;然后知道了id往里插,但若有另外一個客戶端在做數據插入同時也在執行完上面一條語句插入了一條記錄就會導致數據不一致的現象。為此我們可以創建一個sequence,每次插的時候訪問它的一個屬性silverbullet所以有時要具體問題具體分析,該打破三范式的時候還是要敢于打破。除了冗余性外還有一些邊緣性的要求,不是很重要,講到的時候再說。第一范式的第一個要求-要有主鍵;第二個要求-列不可分,不能說姓名我還要分成姓和名。多對多關系的表應分割成三張表,如前一個面試題。個了解知道有這么回事。dbmsline('hi,pl_sql!');/相當于而put_line相當于println。/dbmsline('Error!');/異常捕獲到。字,這樣不易沖突如select、from等;第一個字符必須是字母;變量名最多包含30個種:binary_integer整數主要是計數而不是用來表示字段類型(用來for循環,數組下標,候一定要給一個初值,否則是null。v_countbinary_integer:=0;v_validboolean:=false;dbmsline('v_tempvalue:'||v_date);/行限制。行的時候用/**/。dbmsline(‘Test’);的方式如:();v_:='aaaa';v_:='bj';dbmsline(v_||''||v_);/v_:='aaaa';v_:='bj';dbmsline(v_||''||v_);/PL_SQL語句里的select語句只能返回一條記錄,且select語句里面必須樣做:executeimmediate'createtableT(nnnvarchar2(20)default''aaa'')';由于外面已經有單引號了所以里面的一個單引號得用兩個代表一個。default是給一個默認值。PL_SQL里條件語句是形如if(條件)then…elsif(條件)then…else…endif;注意最后一個ibinary_integer:=0;dbmsline(i);i:=i+1;jbinary_integer:=1;dbmsline(j);j:=j+1;dbmsline(k);這類似于Java里的for循環,reverse表示逆序循環,1..10指定循環范圍。大家看一下,本來錯誤處理也不是我們的重點。dbmsline('選定行數過多!');dbmsline('error');則我們寫的都是跨數據庫平臺的程序。下面學習一下作為dba記錄錯誤常用的一種方法:首先創建一張表叫errorlog記錄錯誤信creattableerrorlog();rollback;insertintoerrorlogvalues(seq_errorlog_,v_errcode,v_errmsg,sysdate);mit;cursorcisclosec;印兩次,而實際上最后是沒找到的,結果明cursorcis不易出錯,平時常用。這是帶參數的游標使用方法。cursorcisif(v_<200)thenelsif(v_=5000)thenendif;可更新的游標,用得不多。is存儲過程沒有返回值,它就得借助于傳出參數,isif(v_a>v_b)thenv_ret:=v_a;elsev_ret:=v_b;endif;調用時采取這種方式:p(v_a,v_b,v_ret,v_temp);dbmsline(v_ret);/注意即便是你這過程有錯誤同樣會被創建,為了展現出錯的地方可以敲入命令:createorreplacefunctionsal_taxisif(v_sal<2000)thenreturn0.1;elsif(v_sal<2750)thenreturn0.15;elsereturn0.2;endif;調用方法如:selectlower(ename),sal_tax(sal)fromemp;actionvarchar2(10),);createorreplacetriggertrigifinsertingtheninsertintoemp2_logvalues(USER,‘insert’,sysdate);elsifupdatingthenelsifdeletingtheninsertintoemp2_logvalues(USER,’delete’,sysdate);endif;新:createorreplacetriggertrigcreatetablearticle(isleafnumber(1),--0代表非葉子節點,1代表葉子節點);createorreplaceprocedurep(v_pid%type,v_levelbinary_integer)iscursorcisselect*fromarticlewherepid=v_pid;v_preStrvarchar2(1024):='';foriin1..v_levelloopv_preStr:=v_preStr||'****';forv_articleincloopif(v_=0)thenp(v_,);endif;2.學生表如下:刪除除了自動編號不同,其他都相同的學生冗余信息號,姓名,課程編號,課程名稱,分數)四個球對,現在四個球對進行比賽,用一條sql語句顯示所有可能的比賽組合.答:selecta.*************************************************************************************selectyear,select*from(selectname,yearb1,lead(year)over()over(************************************************************************************說明:復制表(只復制結構,源表名:a新表名:b)SQL:insertintob(a,b,c)selectd,e,ffromb;tablewhere=a.title)bSQL:selecta.a,a.b,a.c,b.c,b.d,b.ffromaLEFTOUTJOINbONSQL:select*from日程安排wheredatediff('minute',f開始時間,getdate())>5說明:--說明:--說明:從數據庫中去一年的各單位電話費統計(電話費定額賀電化肥清單兩個表來源)SELECTa.userper,a.tel,a.standfee,TO_CHAR(a.telfeedate,'yyyy')AStelyear,SUM(decode(TO_CHAR(a.telfeedate,'mm'),'02',a.factration))ASFRI,SUM(decode(TO_CHAR(a.telfeedate,'mm'),'06',a.factratioSUM(decode(TO_CHAR(a.telfeedate,'mm'),'07',a.factration))ASJUL,SUM(decode(TO_CHAR(a.telfeedate,'mm'),'09',a.faFROM(SELECTa.userper,a.tel,a.standfee,b.telfeedate,b.factrationGROUPBYa.userper,a.tel,a.standfee,TO_CHAR(a.telfeedate,'yyyy說明:四表聯查問題:SQL:select*fromaleftinnerjoinbona.a=b.brightinnerjoincona.a=c.cinnerjoindona.a=d.dwhere.....*******************************************************************************updatebsetb.value=(selecta.valuefromawherea.key=b***************************************************************************原表:5servlet80為了便于閱讀,查詢此表后的結果顯式如下(及格分數為60):3xml40fail4jsp30fail---------------------------------------------------沒有裝ORACLE,沒試過(sign(score-60),-1,'fail','pass')asmarkfromcourse------------------------------5servlet80SQL>selectcourseid,coursename,score,decode(sign(score-60),-1,'fail','pass')asma3xml40fail4jsp30fail*******************************************************************************原表:使用pl/sql代碼實現,但要求你組合后的長度不能超出oraclevarchar2長度的限制。createorreplacetypestrings_tableistableofvarchar2(20);/createorreplacefunctionmerge(pvinstrings_table)returnvarchar2islsvarchar2(4000);foriin1..loopls:=ls||pv(i);returnls;/insertintotvalues(1,'Joan');insertintotvalues(1,'Jack');insertintotvalues(1,'Tom');insertintotvalues(2,'Rose');insertintotvalues(2,'Jenny');selectt0.id,merge(cast(multiset(selectnamefromtwheret.id=t0.id)asstrings_table)from(selectdistinctidfromt)t0;droptypestrings_table;droptablet;3selectd.deptno,d.dname,rtrim(e.ename||','||5orderbye.ename)||','||7orderbye.ename)||','||9orderbye.ename)||','||11orderbye.ename)||','||also先createfunctionget_a2;isCol_a2:='';Col_a2=Col_a2||cur.a2;returnCol_a2;selectdistincta1,get_a2(a1)fromunite_a*******************************************************************************去年應聘一個職位未果,其間被考了一個看似簡單的題,但我沒有找到好的大案.題為:有兩個表,t1,t2,Tablet1:Tablet2:-----------------------.......且用的方法不要增加數據庫負擔,如用臨時表等.inserttable2values(convert(varchar(50),@i),'2001-10-1',100)inserttable2values(convert(varchar(50),@i),

溫馨提示

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

評論

0/150

提交評論