freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

oracle自學(xué)自學(xué)筆記(編輯修改稿)

2025-07-26 08:43 本頁面
 

【文章內(nèi)容簡介】 型)如alter table dept2 add(dphone varchar2(11))。刪除某個字段如alter table dept2 drop(dphone)。還可以修改字段的數(shù)據(jù)類型,如果里面已經(jīng)有數(shù)據(jù)修改的后果應(yīng)不影響原來存的記錄值。 在Oracle里面看當前用戶下有哪些表,哪些約束,哪些視圖等等這些信息被單獨地裝在一張表里面,稱作數(shù)據(jù)字典表。user_tables里面裝的是當前用戶共有多少張表,里面字段可多了,我們關(guān)心的是table_name。查詢當前用戶下有哪些視圖:select view_name from user_views。查詢當前用戶下有哪些表:select table_name from user_tables。查詢當前用戶下有哪些約束:select constraint_name,[table_name] from user_constraints。user_tables、user_constraints、user_views這些都是數(shù)據(jù)字典表,那么一共有多少個數(shù)據(jù)字典表呢?Oracle專門有另外一張表存放數(shù)據(jù)字典表的表叫做dictionary,它總共兩個字段一個叫table_name數(shù)據(jù)字典表的名字、還有一個叫ments對于這張數(shù)據(jù)字典表的描述。總共有600多個數(shù)據(jù)字典表,這就是Oracle的DBA總是背著個小本本的原因,你要背是不可能的。 索引就相當于字典里的索引一樣,它在Oracle里相當于一種新的數(shù)據(jù)庫對象,建立索引的方法create index idx_stu_emil on stu ()。也可以在字段組合上建立索引,以后在查詢組合時效率就高,刪除索引同刪除表方法類似。忘了自己有哪些索引可以采用select index_name from user_indexse。當你給某張表的字段加主鍵或唯一性約束的時候。建立索引的用處是當你建立了索引后取訪問相應(yīng)數(shù)據(jù)的時候效率會很高。注意說的是讀的效率高了,但存的效率反而低了,因為你得同時往索引表里加索引值,會占用大量的空間。記住一點不要輕易建立索引,除非覺得訪問量特別大時。 視圖前面也提過,它是一張?zhí)摫?,嚴格來講就是一個子查詢。利用它可以簡化我們的查詢復(fù)雜度,同時它也有不好的地方,就是表結(jié)構(gòu)改了它也得跟著改動,增加了維護的難度。視圖有些其他功能,比如說我有一個數(shù)據(jù)庫,它里面存了所有的產(chǎn)品信息,而有一個供應(yīng)商他想看我產(chǎn)品的信息,如果我把整張表都給他看那么關(guān)鍵信息他就全部都看走了,我的銷量有多少等等。我可以建立一個視圖里面只包含我想要給他看的內(nèi)容。 序列是Oracle數(shù)據(jù)庫獨有的東西,它產(chǎn)生一個唯一、不間斷的序列,作用是一般做主鍵。如下我們要存儲BBS里的帖子建立一張表:create table article (id number,title varchar2(1024),cont long)。如果要加入一篇文章,采用這種做法select max(id) from article。然后知道了id往里插,但若有另外一個客戶端在做數(shù)據(jù)插入同時也在執(zhí)行完上面一條語句插入了一條記錄就會導(dǎo)致數(shù)據(jù)不一致的現(xiàn)象。為此我們可以創(chuàng)建一個sequence,每次插的時候訪問它的一個屬性nextval就會得到不重復(fù)的id,實際上它是在內(nèi)部做了同步的。六. 范式就是數(shù)據(jù)庫設(shè)計的一些規(guī)則,而它又是由一個姓‘范’的提出的。講到設(shè)計其實是很復(fù)雜的事情,不能指望用幾條規(guī)則把所有的都總結(jié)出來(你在造永動機,追求銀彈silver bullet),所以有時要具體問題具體分析,該打破三范式的時候還是要敢于打破。 三范式追求的是這樣的目標:不存在冗余數(shù)據(jù),換句話說就是同樣的數(shù)據(jù)不存第二遍。當然除了冗余性外還有一些邊緣性的要求,不是很重要,講到的時候再說。 第一范式的第一個要求要有主鍵;第二個要求列不可分,不能說姓名我還要分成姓和名。 第二范式當一張表里有多個字段作為組合主鍵的時候,非主鍵的字段不能夠依賴于部分主鍵,多對多關(guān)系的表應(yīng)分割成三張表,如前一個面試題。 第三范式是不能存在傳遞依賴,即除了主鍵之外的其他字段必須直接依賴于主鍵。比如emp表里的deptno依賴于empno,而loc依賴于empno所以不能放一張表里。七. PL_SQL是Oracle里面的一個編程語言,比較有用,在Oracle內(nèi)部寫一些存儲過程,觸發(fā)器,函數(shù)?;旧厦恳环N數(shù)據(jù)庫都有這么一個語言,SQLServer叫做T_SQL,如果每個都學(xué)比較累,但是可以取學(xué)一種然后其他實在要用時再查上手要快很多??赡芤院笪覀兘佑|的寫存儲過程機會很少,實際上我們用SQL和Java程序就可以解決大部分問題了,這只是讓大家有個了解知道有這么回事。 PL語言用來補充SQL語言的,因為后者不帶有分支和循環(huán),對于有些問題求解不便,而過程語言可以解決。PL_SQL寫程序非常固定,分為四塊,第一塊叫declare,聲明各種變量和游標的地方,可選;第二個叫begin,就是說程序從這開始執(zhí)行了;exception是catch到任何異常時要執(zhí)行的;end是結(jié)束,后面得有一個分號。set serveroutput on。begin (39。hi,pl_sql!39。)。end。/第一句是將內(nèi)部環(huán)境變量打開,默認的是關(guān)掉的,不然看不到任何輸出結(jié)果。declare v_name varchar2(20)。begin v_name := 39。huanggang39。 (v_name)。end。/變量名的寫法是v_+名字,聲明的時候是變量名在前,類型在后;賦值語句有點像pascal冒號等號;declare v_name number := 0。 begin v_name := 2/v_name。 (v_name)。 exception when others then (39。Error!39。)。 end。 /當檢測到異常時才執(zhí)行exception,when others then 這樣做就相當于一張大網(wǎng)子,肯定能把異常捕獲到。 PL_SQL變量聲明規(guī)則:變量名不能夠使用保留字(Oracle里保留字很多所以推薦使用v_+名字,這樣不易沖突),如select、from等;第一個字符必須是字母;變量名最多包含30個字符;不要與數(shù)據(jù)庫的表或者列同名;每一行只能聲明一個變量。常用變量類型7種:binary_integer整數(shù)主要是計數(shù)而不是用來表示字段類型(用來for循環(huán),數(shù)組下標,效率比較高,Oracle追求的目標);number數(shù)字類型;char定長字符串;date日期;long長字符串可達2GB;boolean布爾可取true、false或null值,建議大家布爾類型在用的時候一定要給一個初值,否則是null。declare v_temp number(1)。 v_count binary_integer :=0。 v_sal number(7,2) := 。 v_date date := sysdate。 v_pi constant number := 。 v_valid boolean := false。 v_name varchar2(20) not null :=39。myName39。 begin (39。v_temp value:39。||v_date)。 end。 /。Constant相當于Java的final ,not null對變量進行限制。 Oracle里面的變量經(jīng)常用來存儲某一張表的某個字段的值,使用%type屬性為了解決表里字段的變動與聲明變量類型一致。在PL_SQL里面可以使用 兩個短橫線注釋掉一行,注釋掉多行的時候用/* */。declare v_empno number(4)。 v_empno2 %type。 v_empno3 v_empno2%type。 begin (‘Test’)。 end。%type可以看做變量的一個屬性,指示其類型;引用某張表某個字段方法如v_empno2 %type。 下面接著講PL_SQL里面復(fù)雜的變量,可以定義復(fù)合變量,有兩種:Table相當于Java里的數(shù)組;Record相當于Java里的類,暫且這樣理解。要指定table的數(shù)據(jù)類型,比較復(fù)雜是這樣來做—type type_table_emp_empno is table of %type index by binary_integer。type定義了一種新的數(shù)據(jù)類型名字叫type_table_emp_empno,然后可以用它定義新變量如 v_empnos type_table_emp_empno。比較有意思的是下標可以取負值如v_empnos(1)。 是什么促使了record類型數(shù)據(jù)的出現(xiàn)呢?我們現(xiàn)在寫的是PL_SQL,它最主要用于操縱表,表里面有字段、記錄,如果把一條記錄放一個變量里以后用起來要方便得多。聲明這種類型的方式如:declare type type_record_dept is record( deptno %type, dname %type, loc %type)。 v_temp type_record_dept。begin := 50。 := 39。aaaa39。 := 39。bj39。 (||39。 39。|| )。end。/這樣聲明還有一個弊病,那就是當字段改變時控制起來比較煩人,為此引入rowtype屬性來聲明record變量。只需:declare v_temp dept%rowtype。begin := 50。 := 39。aaaa39。 := 39。bj39。 (||39。 39。|| )。end。/ PL_SQL語句里的select語句只能返回一條記錄,且select語句里面必須有個into或使用游標,還要保證有且僅有一條記錄被返回,這是它比較特別的地方,不然會報錯。在PL_SQL里面使用insert、delete、update后加上mit不然起不了作用有時,只不過。同時還有這么一個需求執(zhí)行上述語句以后有多少條記錄受影響(除select,對它來說沒多大意義),這樣做:(sql%rowcount||39。條記錄受影響39。)。sql代表剛剛執(zhí)行完的sql語句,而rowcount代表剛剛執(zhí)行完的sql語句影響了多少條記錄。 如果在PL_SQL里創(chuàng)建一張表得這樣寫:execute immediate 39。create table T(nnn varchar2(20) default 39。39。aaa39。39。)39。 由于外面已經(jīng)有單引號了所以里面的一個單引號得用兩個代表一個。default是給一個默認值。 PL_SQL里條件語句是形如if (條件) then… elsif (條件) then … else … end if。注意最后一個else后沒有then,其他條件后有,而且elsif沒有那個e,最后以end if;結(jié)束。 PL_SQL里也有三種循環(huán),首先看第一種,如下:declare i binary_integer :=0。begin loop(i)。i:= i+1。exit when (i=11)。 end loop。end。這也類似于Java里的do while循環(huán);第二種,如下:declare j binary_integer :=1。begin while j11 loop(j)。j := j+1。 end loop。end。這也類似于Java里的while循環(huán);第三種,如下:begin begin for k in 1..10 loop (k)。 end loop。 for k in reverse 1..10 loop (k)。 end loop。end。這類似于Java里的for循環(huán),reverse表示逆序循環(huán),1..10指定循環(huán)范圍。 PL_SQL里也可以逮某種類型的錯誤,Java里每一種exception都有相應(yīng)的類為代表,同理PL_SQL里也一樣,如no_data_found/too_many_rows,學(xué)語言得學(xué)會類比。下面舉個例子給大家看一下,本來錯誤處理也不是我們的重點。declare v_temp %type。begin select empno into v_temp from emp where deptno=10。 (v_temp)。exception when too_many_rows then (39。選定行數(shù)過多!39。)。 when others then (39。error39。)。end。 PL_SQL的程序大概也是只有在寫計費的時候或?qū)δ承╉椖坑刑厥庖蟮臅r候,比如效率。否則我們寫的都是跨數(shù)據(jù)庫平臺的程序。 下面學(xué)習一下作為dba記錄錯誤常用的一種方法:首先創(chuàng)建一張表叫errorlog記錄錯誤信息。creat table errorlog( id number primary key, errcode number, errmsg varchar2(1024), errdate date)。然后id是自動遞增的,采用序列:create sequence seq_errlog_id start with 1 increment by 1。在exception里捕獲:exception when others then rollback。 v_errcode := SQLCODE。 v_errmsg := SQLERRM。 insert into errorlog values (,v_errcode,v_errmsg,sysdate)。mit。 PL_SQL的重點游標。Select語句執(zhí)行完后會返回一個結(jié)果集,游標就是最頂上那個指針,指向結(jié)果集的第一條記錄,與迭代器差不多。聲明游標的時候并不會去數(shù)據(jù)庫里取數(shù)據(jù)只有打開的時候,結(jié)果集才會放到內(nèi)存中,關(guān)于游標有四
點擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1