管理信息化ORACLEOracle 筆記_第1頁
管理信息化ORACLEOracle 筆記_第2頁
管理信息化ORACLEOracle 筆記_第3頁
管理信息化ORACLEOracle 筆記_第4頁
管理信息化ORACLEOracle 筆記_第5頁
已閱讀5頁,還剩306頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第四種方法:寫成磁盤文件1.存儲大量數(shù)據(jù),方便檢索和訪問2.保持?jǐn)?shù)據(jù)的一致、完整3.共享和安全4.通過組合分析,產(chǎn)生新的有用信息★使用磁盤文件儲存數(shù)據(jù)初級階段--第一代數(shù)據(jù)庫★出現(xiàn)了網(wǎng)狀模型、層次模型的數(shù)據(jù)庫★關(guān)系型數(shù)據(jù)庫和結(jié)構(gòu)化查詢語言★“關(guān)系-對象”型數(shù)據(jù)庫Oracle------甲骨文Sybase-------賽貝思實(shí)體(Entiy):客觀存在的、可以被描述的事物。如員工、部門屬性(Attribute):用于描述實(shí)體所具有的特征或特性,如使用編號、姓名、部門、工資等屬性員工的特征。關(guān)系(Relationship):實(shí)體之間的聯(lián)系。如部門和員工之間有一對多的關(guān)系。數(shù)據(jù)模型:也叫關(guān)系模型,是實(shí)體、屬性、關(guān)系在數(shù)據(jù)庫中的具體表現(xiàn)。行和列:行代表一個具體的實(shí)體數(shù)據(jù)。也叫一條記錄。課程目標(biāo):●Oracle安裝及配置●事物控制●索引視圖●存儲過程●觸發(fā)器●權(quán)限管理●數(shù)據(jù)庫的備份與恢復(fù)●數(shù)據(jù)庫設(shè)計Oracle的創(chuàng)始人是:LarryEllision創(chuàng)辦了Oracle公司。Oracle8i:Internet表示此時Oracle公司開始開始正式進(jìn)軍互聯(lián)網(wǎng).Oracle9i:Oracle8i和Oracle9i相比是非常相似的

Oracle是由甲骨文公司生產(chǎn)的以高級結(jié)構(gòu)化查詢語言(SQL)為基礎(chǔ)的大型關(guān)系數(shù)據(jù)庫,通俗地講它是用方便邏輯管理的語言操縱大量有規(guī)律數(shù)據(jù)的集合。是目前最流行的客戶/服務(wù)

是目前市場占用率極高的一款數(shù)據(jù)庫產(chǎn)品特點(diǎn):◆提供了基于角色(ROLE)分工的安全保密管理。在數(shù)據(jù)庫管理功能、完整性檢查、安全性、一致性方面都有良好的表現(xiàn)?!糁С执罅慷嗝襟w數(shù)據(jù),如二進(jìn)制圖形、聲音、動畫以及多維數(shù)據(jù)結(jié)構(gòu)等?!籼峁┝伺c第三代高級語言的接口◆提供了新的分布式數(shù)據(jù)庫能力。可通過網(wǎng)絡(luò)較方便地讀寫遠(yuǎn)端數(shù)據(jù)庫里的數(shù)據(jù),并有對稱復(fù)制的技術(shù)。物理結(jié)構(gòu):和應(yīng)用程序的增大而變化。表空間內(nèi)存儲著各項應(yīng)用的數(shù)據(jù)、索引、程序等相關(guān)信息。監(jiān)聽器服務(wù)。3.sqlplus工具sqlplus工具登錄數(shù)據(jù)庫有以下幾種方式:(1).sqlplus:以命令的方式進(jìn)入數(shù)據(jù)庫連接處輸入數(shù)據(jù)庫的名稱,如果不輸入,會進(jìn)行默認(rèn)的,一般默認(rèn)的是最后一個數(shù)據(jù)庫。那么登錄帳戶以后,就可以在數(shù)據(jù)庫中進(jìn)行增、刪、改、查等操作。補(bǔ)到了下一行。這樣看下來表就很混亂,不規(guī)范。所以我們要對其環(huán)境進(jìn)行一下設(shè)置。如設(shè)置每行顯示的長度:setlinesize300;所我們可修改每頁顯示行數(shù)。4.命令我們通常使用的sqlplusw在sqlplusw下編輯代碼時,出現(xiàn)了錯誤,不允許我們使用向左方向鍵向右移動到相應(yīng)的位1.Sqlplus用戶/密碼[as身份]sys:系統(tǒng)用戶名sys具有最大的權(quán)限。scott:它是一個oracle示例/學(xué)習(xí)帳戶3.停止和啟動Oracle/是以操作系統(tǒng)認(rèn)證進(jìn)行登錄4.創(chuàng)建、刪除用戶△創(chuàng)建帳戶:MUNLIMITED----------------------->沒有限制如創(chuàng)建一個hellen的帳戶:createuserhellenidentifiedbyabcd;△刪除帳戶:如:刪除用戶hellen:dropuserhellen;△用戶修改密碼:如:alteruserhellenidentifiedbyabc123;△用戶解鎖:如:alteruserhellenaccountunlock;△查看當(dāng)前登錄用戶△查看系統(tǒng)有哪些用戶:如:△查看用戶的默認(rèn)表空間△查看用戶有哪些表空間△確定用戶帳戶所授予的權(quán)限select*fromDBA_tab_privs;直接授予用戶帳戶的對象權(quán)限select*fromDBA_role_privs;授如授予可以連接到數(shù)據(jù)庫的權(quán)限:granthellentoscott;connect(8)連上Oracle,做最基本操作resource(5)具有程序開發(fā)最基本的權(quán)限exp-full-database可把數(shù)據(jù)庫整個備份輸出的權(quán)限基本語法:類型很適合存儲純文本信息。儲圖片/文檔世紀(jì)中哪一年、月份、月中的哪一天、小時、分鐘和秒。(2)偽列可以從表中查詢,但不能插入、更新和刪除它們的值快速地定位表中的一行。例:一般讀作:[si:kju:]或者是字母SQL的發(fā)音。準(zhǔn),在實(shí)際中,各個數(shù)據(jù)庫就是提供的函數(shù)不同。控制語言。1.DDL(DataDefinitionLanguage)數(shù)據(jù)定義語言:定義數(shù)據(jù)庫對象(表(1)事務(wù)是最小的工作單元,作為一個整體進(jìn)行工作(2)保證事務(wù)的整體成功或失敗,稱為事務(wù)控制或rollback才認(rèn)為是結(jié)束了。如果要永久性的提交可以執(zhí)行:mit命令,再次打開新的窗口時就可要回到原點(diǎn)了,也就是剛才所做的都等于沒做,所有rollback回退是將所有的回退。因?yàn)閞ollback回退是將所有的都回退了,這明顯不太好,那么我們可以設(shè)置幾個回退點(diǎn),使再次回退的時候,不讓其回退到原點(diǎn),而是回退到我們固定的位置上去。如:1.算術(shù)操作符:算術(shù)操作符包括加(+)、減(-)、乘(*)、除(/)。2.連接操作符用于將多個字符串或數(shù)據(jù)值合并成一個字符串例:要求查出雇員的編號、姓名、工作但是顯示的格式是:SELECT'編號是:'||empno||'的雇員,姓名是:'||ename||'工作是'||job;---->使用了連在查詢中也可以使用四則運(yùn)算功能。如我們要查每個雇員的姓名及年薪。例:4.邏輯操作符邏輯操作符用于組合多個計較運(yùn)算的結(jié)果以生成一個或真或假的結(jié)果。注二、在使用集合操作符時,兩個表的類型一定算術(shù)操作符--------最高優(yōu)先級OR邏輯操作符--------最低優(yōu)1.創(chuàng)建表空間基本語法:DATAFILE‘d:\’如:createtablespacejavasky-datafile'd:\'----->目錄地址size20M----------------------->大小為20M2.刪除表空間基本語法:注意表空間的名字需要使用雙引號包圍,并且表空間的名稱需要大寫。3.查看表空間的名稱和狀態(tài)4.修改表空間的狀態(tài)altertablespace表空間名狀態(tài);可以修改表空間的狀態(tài)第一種、select*fromcat;第二種、select*fromtab;●建表如:createtablestudent(idint,namevarchar2(5),addressvarchar2(10));如deststudent;如名稱、類型、是否為空?!裥薷谋?.增加新列2.刪除舊列3.修改列類型(要求,列中無數(shù)據(jù))4.修改列名5.修改表名●插入(記錄)數(shù)據(jù),也就是給列賦值1.給其相應(yīng)的字段賦值:INSERTINTO表名[(列名1,,,,)]VALUES(值1,,,);注:[]中的內(nèi)容2.賦全值INSERTINTOstudentVALUES(1,'李小龍','河北省');3.賦值以后查看該表的內(nèi)容:select*fromstudent;4.插入日期格式的值:●修改記錄●刪除(記錄)數(shù)據(jù)●利用現(xiàn)有的表創(chuàng)建表語法:如:為空。可回滾。function_name(columnleexpression,[arg1,arg2.....])expression:字符串或計算表達(dá)式arg1,arg2:函數(shù)中使用的參數(shù)日期運(yùn)算:-------------------------------------------------------------------------------Initcap(char):將首字母轉(zhuǎn)換為大寫eg:Selectinitcap('hello')fromdual;------->HelloLtrim(char,set):從左邊開始截取字符(一般用來截取空格)Trim():從兩端截取Rtrim(char,set):從右邊開始截取字符(右截空格)Translate(char,from,to):替換單個字符4eg:Selecttranslate(‘jack’,’j’,’b’)fromdual;------->backReplace(char,searchstring,[repstring]):替換多個字符eg:Selectreplace(‘jackandjue’,’j’,’bl’)fromdual;------->blackandblueInstr(char,m,n):返回一個數(shù)值型,標(biāo)識截取的字符的位置,從1開始計,第一次出現(xiàn)的eg:Selectinstr(‘worldwide’,’d’)fromdual;------->5eg:Selectsubstr(‘a(chǎn)bcdefg’,3,2)frC-----C*******abc-----------------------------SQL>SELECTDECODE(id,1,'tom',2,'jack',------jackhellen5.數(shù)字函數(shù)Selectabs(-15)fromdual;Ceil(n)Selectceil(44.778)fromdual;-.Selectcosh(0)fromdual;1Floor(n)Selectfloor(100.2)fromdual;1Selecttrunc(100.256,2)fromdual;Sqrt(n)Selectsqrt(4)fromdual;20Sign(n)Selectsign(-30)fromdual;6.轉(zhuǎn)換函數(shù)-------------●為表增加約束●設(shè)置表所在的表空間●使用序列實(shí)現(xiàn)自動增長約束是在表上強(qiáng)制執(zhí)行的一些數(shù)據(jù)校驗(yàn)規(guī)則,被插入/修改/刪除的數(shù)據(jù)必須符合在相關(guān)字段語法:列定義......推薦采用:表名_列名_約束類型簡寫(1)該列的值不能為空(2)列級約束(2)列級約束、表級約束(3)取名:表名_列名_uk如:名字不能為空且唯一));如果是先創(chuàng)建了表來要增加約束可以寫成:(1)用來唯一標(biāo)識這一行記錄,一個表中只能有一個主鍵(2)功能上相當(dāng)于非空且唯一(3)列給約束、表級約束(4)取名:表名_列名_pkcreatetabledepts(idintprimarykey,---->將id設(shè)置為主鍵descriptionvarchar(100));(5)主鍵有一個最主要的作用是:當(dāng)兩個表關(guān)聯(lián)時,主外鍵時,要求引用的主表中的字段一定要為主鍵。(1)用于兩表間建立關(guān)系,需要指定引用主表的那列(2)列級約束表級約束(3)命名:主表名_子表名_FK(4)語法:--部門表注表createtabledepts(dept_idintprimarykey,descriptionvarchar(20));--員工表子表addressvarchar(20),dept_idint,foreignkey(dept_id)referencesdepts(dept_id)--主鍵);語法:例:referencesdepts(depts_id);表中被使用,則不允許修改此主鍵值。除。例:3foreignkey(dept_id)4referencesdepts(dept_i5ondeletesetnull;--->刪除后設(shè)置為空不存在了,該記錄的引用就就變?yōu)榭樟恕?1)對某列的值進(jìn)行范圍限制、格式限制等(2)列級約束、表級約束(3)取名:表名_列名_ck例:2idintprimarykey,5);6.刪除約束如:刪除sal上的約束例:名稱是否為空?類型7.指定表空間如:descuser_tablespace;----->查看所有的表空間createtablestudent(idint)tablespacesystem;8.創(chuàng)建序列創(chuàng)建語法:從序列中取值:Select序列名.nextvalfromdual;--nextval序列中的下一個值如創(chuàng)建一個序列:2startwith11----------1currval不論執(zhí)行多少次都是1.往部門表中插:insertintodeptsvalues(seq_,"財務(wù)部");SELECTselection_list1.查詢所有記錄的所有列2.查詢特定行3.查詢特定列4.去掉重復(fù)的值5.給列取別名SELECT列名....1.除了張三以外的所有員工:4.有獎金的5.所有姓張的6.姓張的且名字是3個字的。7.在2008.1.1入職的女員工SELECT列名....例:desc;四、在Oracel用“||”表示字符串的連接。如實(shí)現(xiàn)如下查詢:要求查出雇員的編號、姓名、工作但是顯示的格式是:SELECT'編號是:'||empno||'的雇員,姓名是:'||ename||'工作是'||job;在查詢中也可以使用四則運(yùn)算功能。如我們要查每個雇員的姓名及年薪。但是在查詢的結(jié)果中是以sal*12的字段顯示的,這樣的看起來讓人不太明白,不知道到底●多表連接查詢1.使用單個SELECT語句從多個表中取出多個相關(guān)的數(shù)據(jù),通數(shù)據(jù)的查詢。2.多表連接通常是建立在相互關(guān)系的父子表上的。-------------------------------------join_table:參與連接的表join_condition:連接條件●內(nèi)連接1.語法selecta.id,,c.scorefromainnerjoinbona.id=b.idinnerjoinconc.id=b.id[where];2.只列出這些連接表中與連接條件相匹配的數(shù)據(jù)行如:=非等值連接:在連接條件中使用除了等號運(yùn)算符以外其它比較運(yùn)算符來比較被連接的列值.自連接:在連接條件中使用等號(=)運(yùn)算符來比較被連接列的列值,但他使用選擇列表指出如果表的名字很長,可以給其起一個別名如:還可以寫成:fulljoindept●記錄聯(lián)合運(yùn)算,刪除重復(fù)的記錄再返回結(jié)果?!褡硬樵冎械膇n和exists表A表Bexists需要把表進(jìn)行關(guān)聯(lián),in不一定需要。如何選擇in還是exsits?作用在子查詢上使用exists。在數(shù)據(jù)量較大時,exists的效率高于in.2.分組統(tǒng)計級統(tǒng)計函數(shù)的使用3.子查詢,并結(jié)合多表查詢,分組統(tǒng)計做復(fù)雜查詢4.數(shù)據(jù)庫的更新操作5.數(shù)據(jù)庫的更新操作6.事務(wù)處理及數(shù)據(jù)庫死鎖之前在查詢的時候都是在一張表中查詢,那么在一張表以上的查詢就叫做多表查詢?;菊Z法:發(fā)中不介意過多的使用的。要想去掉笛卡爾積,必須使用字段進(jìn)行關(guān)聯(lián)的操作。范例:修改之前的查詢操作:此時只有14行記錄了,消除掉了笛卡爾積。此時又存在了一個新的問題,那么現(xiàn)在表名稱所以要使用多表查詢的時候,最好指定別名。范例:要求查詢出雇員的編號、雇員的姓名、部門的編號、部范例:要求查詢每個雇員的姓名、工作、雇范例:進(jìn)上步擴(kuò)展之前的程序,將雇員的所現(xiàn)在要求查詢每個雇員的姓名、工資、部門名稱,工資在公司的等級(salgrade),及其領(lǐng)先查詢工資表的內(nèi)容(salgrade)0--------------------------1.查每個雇員的姓名、工資、部門名稱,工資在公司的等級(salgrade需要三張表進(jìn)行selecte.ename,e.sal,d.dname2.此時雇員的工資等級已經(jīng)求出,現(xiàn)在再求其領(lǐng)導(dǎo)的姓名及工資所在公司的等級。2.第四等級工資3.第三等級工資4.第二等級工資5.第一等級工資selecte.ename,e.sal,d.dname,DECODE(s.grade,1,'第五等工資',2,'第四等工資',3,'第三等工資',4,'第二等工資',5,'第一等工資'),DECODE(,1,'第五等工資',2,'第四等工資',3,'第三等工資',4,'第二等工資',5,'第一等工資').............部分已省略們添加一個(+)符號...............部分已省略..............部分已省略因?yàn)榘?+)放在等號右邊的時候沒有變化,跟不加一樣,所以默認(rèn)是左連接。左右連接了。..............部分已省略--------------------------------------------------------------------------..............部分已省略子查詢:在一個查詢內(nèi)部還包括另外一個查詢,則稱為子查詢。SELECT{DISTINCT}*|查詢列1別名1|查詢列2別名2..(SELECT{DISTINCT}*|查詢列1別名1|查詢列2別名2..)別名(SELECT{DISTINCT}*|查詢列1別名1|查詢列2別名2..)}1.單列子查詢:返回的結(jié)果是一列的一個內(nèi)容2.單行子查詢:返回多個列,有可能是一個完整的記錄一般在程序開發(fā)中單列子查詢是用的最多的。范例:要求查詢出:部門的名稱、部門的員工數(shù)、部門的平均工資、部門的最低收入雇員的姓名。進(jìn)行分組。如果此時在一個部門之中同時出現(xiàn)兩個雇員的工資是最低的,那么這個程序是錯誤的。對于子查詢來講,還可以進(jìn)行多列子查詢,一個子查詢中同時可以返回多個查詢的列。分組:如將男生分為一組女生分為一組。如果想求出每一組的平均身高、平均年齡,這就是使用到分組函數(shù)。-------------------SELECT{DISTINCT}*|查詢列1別名1|查詢列2別名2..要分組時要注意:在查詢的時候,以上的代碼不能正確的執(zhí)行是因?yàn)椋?.如果程序中使用了分組函數(shù),則有兩種可以使用的情況:(2)如果不使用分組的話,則只能單獨(dú)的使用分組函數(shù)。2.在使用分組函數(shù)時,不能出現(xiàn)分組函數(shù)和分組條件之外的字段。范例:按部門分組,并顯示部門的名稱及部門的員工數(shù)。錯誤的代碼:二種條件的指令:SELECT{DISTINCT}*|查詢列1別名1|查詢列2別名2..分組的簡單原則:只要一列上存在重復(fù)的內(nèi)容才有可能考慮到分組。錯誤的代碼:正確的代碼:5.理解數(shù)據(jù)庫的設(shè)計范式視圖的功能:一個視圖實(shí)際上就是封裝了一個復(fù)雜的子查詢。創(chuàng)建視圖的語法:建立一個視圖,此視圖包含了全部的20部門的雇員信息(雇員姓名、編號、工作、雇傭日期)。視圖在創(chuàng)建完成之后,我們就可以像查找表一樣直接對視圖進(jìn)行查詢操作。此時是通過視圖找到20部門的全部信息,也就是可以發(fā)現(xiàn),可以使用視圖包裝需要的的查加一個sal字段。結(jié)果:名稱已由現(xiàn)有對象使用說明視圖是無法重名的。此時只能先刪除后重新建立。但是如果所有的操作都是這樣操作很麻煩。因?yàn)槿绻胄薷囊晥D必須先刪除視圖,在作用以上的語法,在更改視圖之前就不用再刪除重建了。所以視圖的作用:可以封裝復(fù)雜的查詢,那么下面封裝一個已經(jīng)存在的復(fù)雜查詢。如這是一個復(fù)雜的子查詢:便使用。如:結(jié)果是一樣的。理論上是不允許修改的。----------------------------------------------------------------------------------------------------------------------------------................部分已省略說明創(chuàng)建條件再更改,那么其它字段呢,現(xiàn)在將7369的雇員姓名修改為“hellen”-----------------------------------------------------------------------------------------------------------------------------------------------...............部分已省略數(shù)視圖無法更改,是只讀的操作。在很多數(shù)據(jù)庫系統(tǒng)中存在一個自動增長的列,如果現(xiàn)在要想在Oracle中完成自動增長的功能,則只能依靠序列完成,所有的自動增長操作,需要用戶手工完成處理。序列的創(chuàng)建格式:作,)------------->表已創(chuàng)建向表中添加數(shù)據(jù),添加數(shù)據(jù)的時候,需要手工......-----------------------------從結(jié)果中可以發(fā)現(xiàn),nextval始終在進(jìn)行自動增長的操作,而currval使用取出當(dāng)前操作的序列結(jié)果。進(jìn)行數(shù)據(jù)插入操作。99------->每次增長的幅度是2其結(jié)果為:-------------------------數(shù)據(jù)庫的對象包括:同義詞、序列、視圖、索引。之前一直存在這樣的查詢語句:-----------------------------------------------是用戶.表名。如:select*from;表名稱”如:select*fromdual代替了select*from;詞之后就可以了。2.創(chuàng)建同義詞2.隱藏對象的名稱和所有者3.提供對對象的公共訪問1.私有同義詞只能在其模式內(nèi)訪問,且不能與當(dāng)前模式的對象同名。(這三、創(chuàng)建或替換現(xiàn)有的同義詞:叉樹)。●索引是與表相關(guān)的一個可選結(jié)構(gòu)2.減少磁盤I/O4.在邏輯上和物理上都獨(dú)立于表的數(shù)據(jù)●索引有各種類型,除了標(biāo)準(zhǔn)索引外,還有一些特殊類型的索引:唯一索引、位圖索引、組合索引、基于函數(shù)的索引、反向鍵索引?!駝?chuàng)建標(biāo)準(zhǔn)索引:●唯一索引的值是不能得復(fù)的,我們在創(chuàng)建主鍵時會自動創(chuàng)建一個唯一索引。所以表中如果有主鍵了,就不用去創(chuàng)建唯一索引了?!窠M合索引組合索引是在表的多個列上創(chuàng)建的索引。就像我們在創(chuàng)建主鍵時,可以多列的進(jìn)行創(chuàng)建。ONitemfile(p_category,itemrate);●反向鍵索引如:將個反射鍵索引恢復(fù)成正常索引:注:但是普●位圖索引:Oracle位圖索引主要是應(yīng)用在數(shù)據(jù)倉庫方面,其目的是查詢效率更高,占用更小的索引空間,使用存儲更有效,位圖索引使用壓縮形式存儲使用位圖索引的注意事項:位圖索引應(yīng)該建立在每一個事實(shí)表的外鍵列上。(這只是一個一般的規(guī)則.)位圖索引適用在低基數(shù)列上(大量重復(fù)數(shù)據(jù))●索引的創(chuàng)建原則一個表允許創(chuàng)建幾百個索引,通常我們都不會這樣做,因?yàn)樗饕岣吡瞬樵冃?同時也給如果某幾個字段經(jīng)常一起出來做為條件,則創(chuàng)建多列索引(組合索引)。頻繁更新?!窬鄞厮饕樞驘o關(guān),葉節(jié)點(diǎn)仍然是索引節(jié)點(diǎn),只不過有一個指針指向?qū)?yīng)的數(shù)據(jù)塊。聚簇索引一般用于表的聯(lián)接字段,比如,部門表的部門編號與員工表的所屬部門,創(chuàng)建聚簇索引要先創(chuàng)建聚簇,然后把表的字段放置到簇中接查詢速度。創(chuàng)建一個簇表:●索引組織表)普通表與索引組織表的比較:●基于函數(shù)的索引●獲取索引的信息●使用索引●數(shù)據(jù)庫對象總結(jié):如果其它的服務(wù)齊全,我們可以后添加一個監(jiān)聽。●Oracle查詢工具●Oracle默認(rèn)用戶●更改和刪除用戶該服務(wù)啟動數(shù)據(jù)庫服務(wù)器的監(jiān)聽器,監(jiān)聽器接受來))以上操作是最通用的操作,而且本身也是屬于最正確的操作,但是是在O字段的類型,所在嵌套表本身也需要同樣指定類型,那么這種類型就需要單獨(dú)定義。);/為此類型指定一個名稱。/projectsproject_nt對于插入數(shù)據(jù)來講,需要需要指定每一個project_ty的類型。project_nt(project_ty(0002,'ERP',SYSDATE),//ERP為項目));此時查詢嵌套表,可以返回多個項目。如果此時需要查詢一個部門的全部項目的話,則需要查詢嵌套表。--------------------------------------------------------------------------可見將一個部門中的統(tǒng)一的全部項目查詢出來了。二、可變數(shù)組(了解)行了限制。例如:1.在一個部門有多個工人,如果按照可變數(shù)組的做法,肯定首先要做出一個工人的類型。5)類型已創(chuàng)建。2.面再定義數(shù)組類型:worker_info_list類型已創(chuàng)建。3.定義部門表,一個部門可能存在多個工人4workersworker_info_list5);表已創(chuàng)建。4.插入測試數(shù)據(jù)2worker_info_list(3worker_info(1,'李小龍','男'),4worker_info(2,'張三','男'),5worker_info(3,'李君','女')6)7);-----------------------------------------------------------------------------------------------以上是基礎(chǔ),以下是高級對象PL/SQL游標(biāo)的使用-----------子程序達(dá)到功能更復(fù)雜的一些操作。完成了操作。比如什么時候插值,什么時候修改,可以有條件來限定了。如給一個班級的每個人都提10分,就可以用循環(huán)為完成操作。性。到服務(wù)器端編譯執(zhí)行,然后返回給客戶端一個請求結(jié)果,語句得逐個一條一條的進(jìn)行編譯,個人只需調(diào)用一次就可以了。所以這一點(diǎn)就可以節(jié)約帶寬,減少了網(wǎng)絡(luò)流通量。不同的代碼發(fā)給不同的引擎,當(dāng)處理完之后,會給服務(wù)器一個集中,將結(jié)果返回給客戶端。這是整個過程。5.安全性,可以通過存儲過程限制用戶對數(shù)據(jù)的訪問。如我們寫了一個存儲過程,這里邊可可以,至于里邊操作的是那一個表,對那個表執(zhí)行了什么操作,不必知道。該引擎接受PL/SQL塊并對其進(jìn)行編譯執(zhí)行。用戶發(fā)出請求時候是一個他的執(zhí)行完之后,Oracle服務(wù)器把結(jié)果合成declarations]----------------------------------------可執(zhí)行部分handlers]例:--------------------------------------------------上:聲明部分--------------------------------------------------下:主體部分(包括可執(zhí)行部分和異常部分)----------------------------------------上:可執(zhí)行部分----------------------------------------下:異常部分如:...icode:='i205';---第一種賦值SELECTp_category,itemrate...90----結(jié)果5DBMSLINE('員工工資為:'||v_sal);1.Natural(0-231)(非負(fù)及null)2.Positive(1-231)(正數(shù)和null)3.NaturalN(非空及非負(fù))4.positiveN(正數(shù)和非null)5.signtype(要將整型變量限制為值-1,0,1)1,2,3,4用于防止將空值賦予整型變量。用于聲明最高精度為38位十進(jìn)制數(shù)字的定點(diǎn)數(shù)。定點(diǎn)數(shù)量用定點(diǎn)數(shù)。位十進(jìn)制數(shù)字)浮點(diǎn)數(shù).子類型:real:用于聲明最高精度為63個二進(jìn)制位(大約相當(dāng)于18位十進(jìn)制數(shù)字)浮點(diǎn)數(shù)。此數(shù)據(jù)類型用于存儲帶符號的整數(shù)。從上可以看出同一類型可以出現(xiàn)放不下的可能,所有用的時候有注意。大對象數(shù)據(jù)類型主要用于存儲大文本、圖像、視頻剪輯和聲音剪輯等非結(jié)構(gòu)化數(shù)據(jù)。型6DBMSLINE('員工號為:'||v_rec_||'員工名為:'||v_rec_);使用屬性類型的優(yōu)點(diǎn):息。......3(-----------不能用’-‘(減號);注意:一般不要把變量名聲明與表中字段名完全一樣,如果這樣可能得到不正確的結(jié)果.IF語句循環(huán)控制:順序控制:createtabletoys(idintprimarykey,toynamevarchar2(2),toypricenumber);insertintotoysvalues(1,'a',200);insertintotoysvalues(2,'b',100);insertintotoysvalues(3,'c',90);----------------------11endif;7id=v_id;13endif;原值5:v_id:=&id;新值5:v_id:=2;原值5:v_id:=&id;新值5:v_id:=3;--帶引號8ELSEDBMSLINE('沒有此成績')也可以寫成:新值4:grade:='A';循環(huán)控制語句包括:循環(huán)控制的三種類型:范例:5exit;7endif;8daily_value:=daily_value+10;9dbmsline('每日銷量:'||daily_value);11dbmsline('每月銷量:'||monthly_valu2iint:=0;5dbmsline(i);6i:=i+1;9foriin1..10loopdbmsline(i);foriinreverse1..100loopdbmsline(i);4.順序結(jié)構(gòu)順序控制語句包括:例:relevel_level%type;[INTOdefine_variable_list]2executeimmediate'createtabletest(idint)';--->語句放在單引號中,2sql_stmtvarchar2(200);就是Oracle系統(tǒng)根據(jù)用戶經(jīng)常出現(xiàn)的錯誤,預(yù)先定義出來的一些異常。如返回多行時,就會觸發(fā)一個預(yù)定義異常。7dbmsline('返回太多行');如果不加異常處理部分:4selectsalintov_fromemp;--不定義異常,直接*7dbmsline('無符合條件的數(shù)據(jù)');處理用戶定義異常需要三步:2e_testexception;--聲明異常e_test6ifv_namenotin('a','b','c')then7raisee_test;--引發(fā)異常8endif;9--處理異常12dbmsline('輸入的信息不在規(guī)定的范圍內(nèi)');新值5:v_name:='a';新值5:v_name:='e';2e_testexception;--聲明異常6ifv_namenotin('a','b','c')then7raisee_test;--引發(fā)異常8endif;9--處理異常12raise_application_error(-20001,'輸入的信息不在規(guī)定的范圍內(nèi)');--產(chǎn)生錯誤的時候,同時生成一個號,類似于預(yù)定義錯誤。新值5:v_name:='/';*●執(zhí)行原理:行●作用:逐行處理查詢結(jié)果,以編程的方式訪問數(shù)據(jù)查詢的結(jié)果)樣。將結(jié)果存到內(nèi)存區(qū)域里邊,然后Oracle提供了一種機(jī)制,游標(biāo)就像一個指針一樣,可以指定他的記錄,第一次指向第一條,一直往下,直到結(jié)束。6dbmsline('已更新');7endif;已更新----打印出來了,說明更新,是真6dbmsline('沒有更新');7else8dbmsline('已更新');9endif;6dbmsline('沒有相關(guān)更新');7else9endif;6dbmsline('沒有相關(guān)更新');7else10dbmsline('游標(biāo)已打開');12dbmsline('游標(biāo)已關(guān)');--始終都是關(guān)著的13endif;14endif;顯式游標(biāo)(重點(diǎn))查詢,用的最多?;静骄?聲明游標(biāo)打開游標(biāo)提取關(guān)閉1.帶參數(shù)的顯式游標(biāo)ISselect_statement;----------------------------------------------------------------------3--注:定義參數(shù)時,只需要給定一個類型就可以了,不用給定8fetchtoy_curintoa;--提取10dbmsline('玩具名:'||a.toyname||'價格為:'||a.toyprice);12closetoy_cur;--關(guān)閉原值6:opentoy_cur(&price);--需要輸入的值新值6:opentoy_cur(100);--需要輸入的值玩具名:f價格為:600-------------------------------->很明顯帶有參數(shù)的游標(biāo)要給不帶參的靈活。其>100元2.使用顯式游標(biāo)更新行--創(chuàng)建游標(biāo)select*fromtoys;dbmsline('符合要求的有:'||'玩具名'||toys_||'價格為'||toys_);符合要求的有:玩具名c價格為90select*fromtoys;-----------------select*fromtoys;dbmsline('符合要求的有:'||toys_);select*fromtoys;------------------3.循環(huán)游標(biāo)循環(huán)游標(biāo)的語法如下:--toy_rectoys%rowtype;--toy_rec變量在此處定義可不定義,就像if語句中的i變量,不cursortoy_curisselect*fromtoys;fortoy_recintoy_curdbmsline(toy_||toy_||toy_);--closetoy_cur;注:同理不用關(guān)閉●REF游標(biāo)和游標(biāo)變量執(zhí)行時給游標(biāo)設(shè)定一個查詢。使用的頻率很少。主要是以游標(biāo)變量的形式進(jìn)行操作的。創(chuàng)建游標(biāo)變量需要兩個步驟:--------------------------------------REF游標(biāo)分為兩種類型:弱類型和強(qiáng)類型。它們的區(qū)別差一個弱類型游標(biāo)不能放入包中。2typeref_toy_curisrefcursor--聲明一個REF游標(biāo)5cur_toyref_toy_cur;--聲明一個REF類型的變量9fetchcur_toyintov_rec;13closecur_toy;a4curc_type;9orderbysaldesc'--排序11DBMSLINE('薪水大于'||p_salary||'的員工有:');16||'姓名:'||r_||'薪水:'||r_);●游標(biāo)變量的優(yōu)點(diǎn)和限制游標(biāo)變量的功能強(qiáng)大,可以簡化數(shù)據(jù)處理。(2)可以作為過程的參數(shù)進(jìn)行傳遞(3)可以引用游標(biāo)的所有屬性(4)可以進(jìn)行賦值運(yùn)算(1)不能在程序包中聲明游標(biāo)變量(3)不能使用比較運(yùn)算符來使用,我們叫這個為匿名塊,沒名字。子程序的各個部分:聲明部分、可執(zhí)行部分、異常處理部分(可選)子程序的分類:1.過程-執(zhí)行某些操作2.函數(shù)-執(zhí)行操作并返回值●子程序-過程過程是用于完成特定任務(wù)的子程序。創(chuàng)建過程的語法:IS|AS--選一個,兩個意義是一樣的<localvariabledeclaration>--本過程要使用的變量9dbmsline('沒有此人:');過程已創(chuàng)建。執(zhí)行過程的語法:10endif;過程已創(chuàng)建。--調(diào)用子程序過程5dbmsline('工資標(biāo)準(zhǔn):'||v_sal);7x:=y;過程已創(chuàng)建。--調(diào)用參數(shù)5swap(a,b);將過程的執(zhí)行權(quán)限授予其他用戶:創(chuàng)建函數(shù)的語法:[localdeclarations]創(chuàng)建函數(shù):IS/注:函數(shù)是不能單獨(dú)存在的,要跟其它部分共同構(gòu)9return'工資在范圍內(nèi)';11return'不在范圍內(nèi)';12endif;-----------------------------------------------●調(diào)用自定義函數(shù)位置表示法functionName(arg1[,混合表示法:同時使用位置表示法和名稱表示法為函數(shù)傳遞參數(shù)。名稱表示法。調(diào)用get_salary函數(shù)11dbmsline('沒有選定的信息');13dbmsline('錯誤代號'||sqlcode);--調(diào)用函數(shù)6dbmsline('工資總和為:'||v_sum||'人員個數(shù)為:'||v_count);--按名稱調(diào)用--混合調(diào)用●創(chuàng)建參數(shù)帶有默認(rèn)值的函數(shù)2fun_def(namevarchar2,ageint,sexvarchar2default'男5v_resultvarchar2(50);7v_result:='姓名:'||name||'年齡:'||age||'性別:'||sex;8returnv_result;2v_resultvarchar2(50);4--v_result:=fun_def('李龍',20);6dbmsline(v_result);姓名:杰克年齡:23性別:男--------默認(rèn)為男也可以加上性別:2v_resultvarchar2(50);5dbmsline(v_result);姓名:多莉年齡:23性別:女●過程和函數(shù)的比較:2is3v_locvarchar2(30);6dbmsline(v_loc);7rollback;--注:回滾過程已創(chuàng)建。2is3v_locvarchar2(20);2is6first();--在第2個過程中調(diào)用第1個過程8dbmsline(v_loc);過程已創(chuàng)建。之所以改動后的值沒有被保留,是因?yàn)樵趂irst中有一個rollback;2is3v_locvarchar2(30);7dbmsline(v_loc);8rollback;過程已創(chuàng)建。3v_locvarchar2(20);6first();8dbmsline(v_loc);過程已創(chuàng)建。主事(first)務(wù)處理啟動獨(dú)立事務(wù)處理1.與主事務(wù)處理的狀態(tài)無關(guān)2.提交或回滾操作不影響主事務(wù)處理4.能夠啟動其他自主事務(wù)處理程序包是對相關(guān)過程、函數(shù)、變量、游標(biāo)和異常等對象的封裝。程序包由規(guī)范和主體兩部分組成。在規(guī)范中可以聲明:包括類型、變量、常量、異常、游標(biāo)規(guī)在主體中可以聲明:對象和實(shí)現(xiàn)在包規(guī)范中聲明●創(chuàng)建程序包1.程序包規(guī)范IS|AS[Publicitemdeclarations]2.程序包主體IS|AS[Privateitemdeclarations]Initialization]4--過程及函數(shù)的規(guī)格聲明5--實(shí)現(xiàn)創(chuàng)建一個過程8functionfun_firstreturnvarchar2;--函數(shù)程序包已創(chuàng)建。●程序包的優(yōu)點(diǎn):模塊化、更輕松的應(yīng)用程序設(shè)計、信息隱藏、新增功能、性能更佳●程序包中的游標(biāo):在包中聲明游標(biāo)的要求:2.程序員定義的記錄類型創(chuàng)建游標(biāo)程序包范例:程序包已創(chuàng)建。15dbmsline('名為:'||v_rec_||'工資:'||v_rec_);程序包體已創(chuàng)建。--調(diào)用包中的過程●有關(guān)子程序和程序包的信息●總結(jié):程序包是對相關(guān)類型、變量、常量、游標(biāo)、使用程序包的優(yōu)點(diǎn)是:模塊化、更輕松的程序設(shè)計、信息隱藏觸發(fā)器的功能:3.提供審計和日志記錄(在我的數(shù)據(jù)庫執(zhí)行了什么樣的操作都可以記錄下來)4.啟用復(fù)雜的業(yè)務(wù)邏輯(是與多個表相關(guān)的如:從一個員工辭職了,其中的一個表中刪除了所以觸發(fā)器是數(shù)據(jù)庫的高級使用。●觸發(fā)器的組成部分觸發(fā)器由三部分組成:):2.觸發(fā)器限制:執(zhí)行觸發(fā)器的條件,該條件必須為真才能激活觸發(fā)器3.觸發(fā)器操作(主體):有觸發(fā)器的條件為真是,觸發(fā)器的主體才會運(yùn)行。后操作表,如果是多后,先操作表,后執(zhí)行觸發(fā)器的主體。每一個符合條件的行,他都會去執(zhí)行,常用的是行級。單獨(dú)執(zhí)行一次。觸發(fā)器最常用的對象是表。●創(chuàng)建觸發(fā)器語法trigger_body;語法分析:●每張表最多可建立12種類型的觸發(fā)器,它們是:如果12個都創(chuàng)建時容易落入一個災(zāi)難,因?yàn)閯?chuàng)建以后,只要一符合條件就會自動觸發(fā),有可能產(chǎn)生遞歸,所以觸發(fā)器要適量而止。觸發(fā)器的執(zhí)行順序:●觸發(fā)器的限制:觸發(fā)器被激活時的特殊對象:觸發(fā)器的發(fā)、創(chuàng)建:為salary_records表創(chuàng)建trig-sal觸發(fā)器●觸發(fā)器的類型有:●觸發(fā)器的組成部分示例例1:為salary_records表創(chuàng)建trig-sal觸發(fā)器…操作:sal_diff:=:-:;DBMSLINE(‘工資差額:’sal_diff);●工作原理:●總結(jié):createorreplacetriggertrigafterinsert--頻率--主體if(:=0)thendbmsline('有一個玩具的價格為0');endif;--插入一條數(shù)據(jù)啟動觸發(fā)器SQL>insertintotoysvalues(4,'水槍',0);--觸動了觸發(fā)器SQL>insertintotoysvalues(5,'游戲機(jī)',10);--沒有觸動觸發(fā)器二、觸發(fā)器的分類:2.數(shù)據(jù)庫級觸發(fā)器:在發(fā)生打開、關(guān)閉、登錄和退出數(shù)據(jù)庫等系統(tǒng)事件時執(zhí)行。4.語句級觸發(fā)器:無論受影響的行數(shù)是多少,都只執(zhí)行一次--inserting謂詞,插入ifinsertingthenselectinto:fromdual;elsedbmsline('不能修改ID的值');endif;給A表中插入值:insertintoAvalues(10,'jack');---------------5jackifinsertingthenselectinto:fromdual;elsedbmsline('不能修改ID的值');raise_application_error(20003,'不能修改ID的值');endif;創(chuàng)建一個觸發(fā)器:createorreplacetriggertrigifinsertingthendbmsline('在表中執(zhí)行了插入操作');elsifupdatingthendbmsline('在表中執(zhí)行了更新操作');elsedbmsline('在表中執(zhí)行了刪除操作');endif;觸發(fā)器創(chuàng)建完成之后,對表進(jìn)行一系列操作如:創(chuàng)建一個表用來記錄:創(chuàng)建一個觸發(fā)器:SQL>createtableB(idint);表已創(chuàng)建。表已刪除。刪除觸發(fā)器:制。他主要是對視圖進(jìn)行操作的,如果不對視圖操作沒什么意義。3.理解數(shù)據(jù)庫的規(guī)范化-三大范式●為什么需要設(shè)計數(shù)據(jù)庫?1.節(jié)省數(shù)據(jù)的存儲空間2.能夠保證數(shù)據(jù)的完整性3.方便進(jìn)行數(shù)據(jù)庫應(yīng)用系統(tǒng)的開發(fā)糟糕的數(shù)據(jù)庫設(shè)計:1.數(shù)據(jù)冗余、存儲空間浪費(fèi)3.數(shù)據(jù)更新和插入的異?!褴浖椖块_發(fā)周期1.需求分析階段:分析客戶的業(yè)務(wù)和數(shù)據(jù)處理需求;2.概要設(shè)計階段:設(shè)計數(shù)據(jù)庫的E-R模型圖,確認(rèn)需求信息的正確和完整;行審核;4.代碼編寫階段:選擇具體數(shù)據(jù)庫進(jìn)行物理實(shí)現(xiàn),并編寫代碼實(shí)現(xiàn)前端應(yīng)用;5.軟件測試階段:……6.安裝部署:……●設(shè)計數(shù)據(jù)庫的步驟1.收集信息:與該系統(tǒng)有關(guān)人員進(jìn)行交流、坐談,充分理解數(shù)據(jù)庫需要完成的任務(wù)。用戶注冊和登錄,后臺數(shù)據(jù)庫需要存放用戶的用戶發(fā)貼,后臺數(shù)據(jù)庫需要存放貼子相關(guān)信論壇版塊管理:后臺數(shù)據(jù)庫需要存放各個版塊信息,如版主、版塊名稱、貼子數(shù)等;2.標(biāo)識對象(實(shí)體-Entity)如:實(shí)體一般是名詞:3.標(biāo)識每個實(shí)體的屬性(Attribute)如:論壇用戶:呢稱、密碼、電子郵件、生日、性別、用戶的等級、備注信息、注冊信息、主貼:發(fā)貼人、發(fā)貼表情、回復(fù)數(shù)量、標(biāo)題、正文、點(diǎn)擊數(shù)、狀態(tài)、最后回復(fù)時間?;刭N:帖子編號、回帖人、回帖表情、標(biāo)題、正文、回帖時間、點(diǎn)擊4.標(biāo)識對象之間的關(guān)系(Relationship)如:跟貼和主貼有主從關(guān)系:我們需要在跟貼對象中表明它是誰的跟貼;版塊和用戶有關(guān)系:從用戶對象中可以根據(jù)版塊對象查出對應(yīng)的版主用戶的情況;主貼和版塊有主從關(guān)系:需要表明發(fā)貼是屬跟貼和版塊有主從關(guān)系:需要表明跟貼是屬于哪個版塊的;5.繪制E-R(Entity-Relationship)實(shí)體關(guān)系圖如:標(biāo)識每個表的主鍵列,需要注意的是:沒有主鍵的表添加ID編號列,它沒有實(shí)際含義,用●數(shù)據(jù)規(guī)范化),如在一個表中的一列的值為:中國北京,這就違反了第一范如圖:2.第二范式如果一個關(guān)系滿足1NF,并且除了主鍵以外的其他列,都依賴與該主鍵,則滿足第二范式如有一個表其字段為:3.第三范式起來關(guān)系。存在這樣關(guān)系的字段是不能同時存在于一個表中的,也就是要直接關(guān)聯(lián)的不要間接關(guān)聯(lián)的?!褚?guī)范化實(shí)例假設(shè)某建筑公司要設(shè)計一個數(shù)據(jù)庫。公司的業(yè)務(wù)規(guī)則概括說明如下:公司承擔(dān)多個工程項目,每一項工程有:工程號、工程公司有多名職工,每一名職工有:職工號、姓名、性別、職務(wù)(工要重復(fù)輸入大量的數(shù)據(jù)。這種重復(fù)的輸入操作,很可能導(dǎo)致數(shù)據(jù)的不一致性。第4張表的字段包括:工程號、職工號、工時---->以工程號和職工號同時為主鍵,這是一●規(guī)范化和性能的關(guān)系1.為滿足某種商業(yè)目標(biāo),數(shù)據(jù)庫性能比規(guī)范化數(shù)據(jù)庫更重要2.通過在給定的表中添加額外的字段,以大量減少需要從中搜索信息所需的時間),4.進(jìn)行規(guī)范化的同時,還需要綜合考慮數(shù)據(jù)庫的性能?!窨偨Y(jié)在需求分析階段,設(shè)計數(shù)據(jù)庫的一般步驟為:收集信息、標(biāo)識對象、標(biāo)識每個對象的屬性、標(biāo)識對象之間的關(guān)系。在概要設(shè)計階段和詳細(xì)設(shè)計階段,設(shè)計數(shù)據(jù)庫的步驟為:3.應(yīng)用三大范式規(guī)范化表格為了設(shè)計結(jié)構(gòu)良好的數(shù)據(jù)庫,需要遵守一些專門的規(guī)則,稱為數(shù)據(jù)庫的設(shè)計范式。在制作數(shù)據(jù)庫時冗余是不可能是完全避免的,而且適當(dāng)?shù)娜哂噙€可以提高性能。物理備份是對數(shù)據(jù)庫的操作系統(tǒng)物理文件(如數(shù)據(jù)文件●故障類型在數(shù)據(jù)庫無法正確讀取或?qū)懭肽硞€數(shù)據(jù)庫文件時,●導(dǎo)出和導(dǎo)入實(shí)用程序使用以下三種方法調(diào)用導(dǎo)出和導(dǎo)入實(shí)用程序:1.命令參數(shù)行、交互提示符、參數(shù)文件命令參數(shù)行:在命令行指定執(zhí)行程序的參數(shù)和參數(shù)值。交互提示符:以交互的方式提示用戶逐個輸入?yún)?shù)的值?!駥?dǎo)出和導(dǎo)入數(shù)據(jù)庫對象的四種模式是:1.完全數(shù)據(jù)庫:導(dǎo)出和導(dǎo)入整個數(shù)據(jù)庫中的所有對象2.表:導(dǎo)出和導(dǎo)入一個或多個指定的表或表分區(qū)3.用戶:導(dǎo)出和導(dǎo)入一個用戶模式中的所有4.表空間:導(dǎo)出和導(dǎo)入一個或多個指定的表空間中的所有對象---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------格式:使用參數(shù)文件導(dǎo)出數(shù)據(jù):expsystem/aptechparfile='C:\'●導(dǎo)入實(shí)用程序有如下常用命令參數(shù):----------------------------------------------------------------------------------------------------------------------------------------------FILE指定要導(dǎo)入的二進(jìn)制文件名格式:使用參數(shù)文件導(dǎo)入數(shù)據(jù):impsystem/oracleparfile='C:\'在安裝完成之后可以使用兩個命令進(jìn)行數(shù)據(jù)庫的備份與恢復(fù)。戶名和口令(scott/tiger),進(jìn)入到帳戶以后,我們看一下在這個帳戶下都有那些表有的表都導(dǎo)出完成之后,備份就完成了。檢驗(yàn)備份的效果,我們把數(shù)據(jù)庫中的表全部表刪除,然后再進(jìn)行恢復(fù)。1.數(shù)據(jù)泵導(dǎo)出和導(dǎo)入可以實(shí)現(xiàn)邏輯備份和邏輯恢復(fù)。2.數(shù)據(jù)泵導(dǎo)出和導(dǎo)入可以在數(shù)據(jù)庫用戶之間移動對象。4.使用數(shù)據(jù)泵導(dǎo)入可以實(shí)現(xiàn)表空間搬移使用注意事項:oracle客戶端使用。3.兩個工具的導(dǎo)出只能用各自對應(yīng)的導(dǎo)入工具。1.scott/tiger指定由哪個一有戶導(dǎo)出、2.directory:指定導(dǎo)出文體的路徑3.dumpfile:指定導(dǎo)出的文件名4.tables:指定導(dǎo)出的表的集合如下:2.導(dǎo)出方案普通用戶只能導(dǎo)出自身方案,如果要導(dǎo)出其他方案,由要求用戶必須具有DBA角色或者3.導(dǎo)出表空間4.導(dǎo)出數(shù)據(jù)庫導(dǎo)出數(shù)據(jù)庫是指將數(shù)據(jù)庫所有對象及數(shù)據(jù)存儲到轉(zhuǎn)儲文件中選項來完成的。數(shù)據(jù)泵導(dǎo)入包括:導(dǎo)入表、導(dǎo)入方案、導(dǎo)入表空間、導(dǎo)入數(shù)據(jù)庫等四種模式。1.導(dǎo)入表:--使用系統(tǒng)帳戶2.導(dǎo)入方案:3.導(dǎo)入表空間4.導(dǎo)入數(shù)據(jù)庫2.導(dǎo)出方案:2.導(dǎo)入方案:3.導(dǎo)入數(shù)據(jù)庫表空間脫機(jī)--->備份表空間---->恢復(fù)表空確保數(shù)據(jù)庫當(dāng)前不處于歸檔方式--->設(shè)置相關(guān)數(shù)據(jù)庫初始化參數(shù)--->在歸檔日志方式下啟已連接。SQL>archiveloglist2.手動歸檔:手動歸檔允許用戶手動歸檔非活動日志文件文件的已填充組現(xiàn)自己都有一個要求。因?yàn)橹鲃訖?quán)一直都是由數(shù)據(jù)庫廠商把握,所以早期的java程序員要廠商來實(shí)現(xiàn),那個數(shù)據(jù)庫要和java相連,必須實(shí)現(xiàn)sun公司推出的這個接口。所以對于現(xiàn)有數(shù)據(jù)庫的目的。如:Oracle數(shù)據(jù)庫的驅(qū)動是:(.)如:(jdbc:oracle:thin:@localhost:1521:orcl)這是一個Oracle數(shù)據(jù)庫的URL信息。用戶如:(scott)密碼如:(tiger)驅(qū)動程序(驅(qū)動程序會自動通過()方法注冊)。try{(“.”);.println(“找不到驅(qū)動程序類”);}如:(url,user,pwd);staticConnectiongetConnection(Stringurl)staticConnectiongetConnection(Stringurl,Propertiesinfo)staticConnectiongetConnection(Stringurl,Stringuser,Stringpassword)publicclassdataSourse{//驅(qū)動程序名publicStringdriver=".";publicStringurl="jdbc:oracle:thin:@localhost:1521:orcl";//用戶名publicStringuser="scott";//密碼//獲取連接的方法注:Connection()是一個接口,所以這是一個接口類型的方法//動態(tài)加載驅(qū)動程序(driver);//加載驅(qū)動Class類的forName()方法conn=(url,user,pwd);}//創(chuàng)建對象//輸出連接對象.println(con);}}平時不這么做,而是將這些信息放到一個屬性文件中。屬性文件是以properties為擴(kuò)展名driver=.url=jdbc\:oracle\:thin\:@localhost\:1521\:orcl然后我們可以在類中加載這個文件,加載properties文件有兩個方法,一是利用構(gòu)造器,靜態(tài)區(qū)塊也是在創(chuàng)建對象時執(zhí)行,而且只執(zhí)行一次,我們平時常用構(gòu)造進(jìn)行器加載。publicinterfaceIdataSource{//獲得數(shù)據(jù)庫連接//關(guān)閉數(shù)據(jù)庫連接}//獲取連接所需要的信息publicStringdriver="";publicStringurl="";publicStringuser="";//在構(gòu)造器初始化時。加載屬文件,獲取相關(guān)信息publicdataSource(){//創(chuàng)建properties屬性文件對象try{//加載屬性文件(newFileInputStream("D:\\"));//文件所在路徑//通過Properties對象的getProperty()方法獲得相應(yīng)的值driver=("driver");url=("url");user=("user");try{//動態(tài)加載驅(qū)動(driver);e.printStackTrace();}e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}//獲取數(shù)據(jù)庫連接return(url,user,pwd);;}//關(guān)閉數(shù)據(jù)庫連接if(conn!=null&&!()){();}}}完數(shù)據(jù)庫之后,如果確定不在需要連接,則必須用close()方法來關(guān)閉與數(shù)據(jù)庫的連接,以釋放連接時相關(guān)的必要資源?!馩racle數(shù)據(jù)庫:驅(qū)動程序包名:ojdbc14.jar驅(qū)動類的名字:.要根據(jù)數(shù)據(jù)庫的安裝情況填寫。其中各個部分含義如下:dbip–為數(shù)據(jù)庫服務(wù)器的IP地址,如果是本地可寫:localhost或。port–為數(shù)據(jù)庫的監(jiān)聽端口,需要看安裝時的配置,缺省為1521。jdbc:oracle:thin:@localhost:1521:allandb驅(qū)動程序包名:式。紅色字體部需要根據(jù)數(shù)據(jù)庫的安裝情況填dbip–為數(shù)據(jù)庫服務(wù)器的IP地址,如果是本地可寫:localhost或。驅(qū)動類的名字:.根據(jù)數(shù)據(jù)庫的安裝情況填寫。其中各個部分含義如下:dbip–為數(shù)據(jù)庫服務(wù)器的IP地址,如果是本地可寫:localhost或。jdbc:mysql://localhost:3306/allandb數(shù)據(jù)庫連接的取得是一個非常消耗時間和資源的動作。取得一個數(shù)據(jù)庫的間和資源,通常會實(shí)現(xiàn)一個連接池。如果有了連接池,那么我們有需要不需要時就將連接放回到池中,而不是直接關(guān)閉連接。使用ArrayList來實(shí)現(xiàn)連接池。接口:publicinterfaceIdataSource{//獲得連接//關(guān)閉連接需要關(guān)閉其對象}我們要手動將他連帶的對象關(guān)掉,如執(zhí)行語現(xiàn)在創(chuàng)建一個連接池:publicStringdriver="";//驅(qū)動publicStringurl="";//jdbcURLpublicStringuser="";//用戶privateintmax;//連接池中允許存放的最大連接數(shù)//用ArrayList實(shí)現(xiàn)連接池//在構(gòu)造器初始化時,加載到屬性文件,獲取相關(guān)信息publicConnectioPool(){//創(chuàng)建Properties屬性文件對象//加屬性文件try{(newFileInputStream("D:\\"));//通過Properties對象的getProperty()方法獲得相應(yīng)的值driver=("driver");url=("url");user=("user");max=(("poolsize"));//加載驅(qū)動程序類(driver);e.printStackTrace();}e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}Setrs){if(rs!=null){try{();e.printStackTrace();}}if(stmt!=null){try{();e.printStackTrace();}}if(()==max){try{();e.printStackTrace();}}else{(connection);}}if(()==0){return(url,user,pwd);}else{return(()-1);}}}c3p0(推薦):proxool(推薦):最為關(guān)鍵的是這個連接池提供監(jiān)控的功能,方便易用,便于發(fā)現(xiàn)連接泄漏的情況。如:建表范例:publicstaticvoidmain(String[]args)throwsSQLException{//聲明數(shù)據(jù)庫連接池對象//獲得數(shù)據(jù)庫連接Stringsql="createtableA(idint,namevarchar2(10))";(sql);//注:executeUpdate()返回的一個整型if(stmt!=null){();}//關(guān)閉連接(con);}}法("inserintoA(1001,'Jack')");的是int類型的,表示記錄變動的數(shù)據(jù)。而executeQurey()方法返回的是一個.ResultSet對象,代表查詢的結(jié)果,查詢的結(jié)果會一條一條的記錄,可以使用ResultSet的next()方法來移至下一條記錄,它會返回true或false表示是否有下一條記錄,接著可以使用getXXX()方法來獲得數(shù)據(jù)。例如:getString()getInt()getFloat()等方法分別獲得相應(yīng)字段類型的記錄,getXXX()方法提供("id");//建議使用這種方式(1);publicstaticvoidmain(String[]args)throwsSQLException{//創(chuàng)建數(shù)據(jù)庫連接池//獲得數(shù)據(jù)庫連接try{//執(zhí)行查詢等到一個結(jié)果集ResultSetrs=(sql);//循環(huán)讀取結(jié)果集中的數(shù)據(jù)while(()){.print(("ename")+"\t");.print(("empno")+"\t");.println(("deptno"));}e.printStackTrace();}finally{//關(guān)閉Result對象//(rs);//(stmt);//關(guān)閉連接對象(con);}}}ResultSetexecuteQuery(Stringsql)ResultSet是一個接口他中有一個方法:將指針從當(dāng)前位置下移一行。新數(shù)目。如果事先無法得知進(jìn)行查詢或是更新,就可以使用execute()方法。PrepareStatementstmt=("insertintojdbc(id,name)(?,?)");setInt()setString()setXXX()方法,制定?處真正應(yīng)該有的參數(shù),如:(1001);("lixiaolong");publicstaticvoidmain(String[]args)throwsSQLException{//創(chuàng)建數(shù)據(jù)庫連接池//獲得數(shù)據(jù)庫連接Stringsql="insertintojdbcvalues(?,?)";(false);//ture為自動提交false為手動提交不寫默認(rèn)為自動提交PreparedStatementpstt=(sql).println("請輸入ID");intid=();(1,id);//有兩個參數(shù)第一個表示索引值,第二個是列名.println("請輸入姓名");();();//提交事物注:事物有四個特性.println("賦值成功");}}即可。(false);("......");//SQL語句("......");//SQL語句("......");//SQL語句();():publicstaticvoidmain(String[]args)throwsSQLException{Stringsql="insertintojdbcvalues(?,?)";(false);//ture為自動提交false為手動提交不寫默認(rèn)為自動提交PreparedStatementpstt=(sql)//插入一萬條記錄作批量處理for(inti=1;i<5;i++){(1,i);(2,"JACK"+i);();}();//批執(zhí)行語句();//提交事物.println("賦值成功");}}ResultSet數(shù)據(jù)的數(shù)據(jù),即描述所查到的數(shù)據(jù)的背后的數(shù)據(jù)描述,用來表示表的名稱,字段publicstaticvoidmain(String[]args)throwsSQLException{//聲明數(shù)據(jù)庫連接池對象//獲得數(shù)據(jù)庫連接//聲明結(jié)果集對象ResultSetrs=null;

溫馨提示

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

評論

0/150

提交評論