隨筆 - 9  文章 - 5  trackbacks - 0
          <2009年1月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          Oracle PL/SQL中如何使用%TYPE和%ROWTYPE (轉(zhuǎn)載)
          1. 使用%TYPE
          在許多情況下,PL/SQL變量可以用來存儲(chǔ)在數(shù)據(jù)庫(kù)表中的數(shù)據(jù)。在這種情況下,變量應(yīng)該擁有與表列相同的類型。例如,students表的first_name列的類型為VARCHAR2(20),我們可以按照下述方式聲明一個(gè)變量:
          DECLARE
          v_FirstName VARCHAR2(20);
          但是如果first_name列的定義改變了會(huì)發(fā)生什么(比如說表改變了,first_name現(xiàn)在的類型變?yōu)閂ARCHAR2(25))?那就會(huì)導(dǎo)致所有使用這個(gè)列的PL/SQL代碼都必須進(jìn)行修改。如果你有很多的PL/SQL代碼,這種處理可能是十分耗時(shí)和容易出錯(cuò)的。
          這時(shí),你可以使用"%TYPE"屬性而不是將變量類型硬性編碼。
          例如:
          DECLARE
          v_FirstName students.first_name%TYPE;
          通過使用%TYPE,v_FirstName變量將同students表的first_name列的類型相同(可以理解為將兩者邦定起來)。
          每次匿名塊或命名塊運(yùn)行該語句塊以及編譯存儲(chǔ)對(duì)象(過程、函數(shù)、包、對(duì)象類和觸發(fā)器)時(shí),就會(huì)確定該類型。
          使用%TYPE是非常好的編程風(fēng)格,因?yàn)樗沟肞L/SQL更加靈活,更加適應(yīng)于對(duì)數(shù)據(jù)庫(kù)定義的更新。
          2. 使用%ROWTYPE
          2.1 PL/SQL記錄
          PL/SQL記錄類型類似于C語言中的結(jié)構(gòu),是一種復(fù)合類型,是用戶自定義的。
          記錄提供了一種處理獨(dú)立的但又作為一個(gè)整體單元相關(guān)的變量的機(jī)制。請(qǐng)看:
          DECLARE
          v_StudentID NUMBER(5);
          v_FirstName VARCHAR2(20);
          v_LastName VARCHAR2(20);
          這3個(gè)變量在邏輯上是相互關(guān)聯(lián)的,因?yàn)樗麄冎赶騭tudents表中不同的字段。如果為這些變量聲明一個(gè)記錄類型,那么他們之間的關(guān)系就十分明顯,可作為一個(gè)單元進(jìn)行處理。
          DECLARE
          /*Define a record type to hold common student informationi*/
          TYPE t_StudentRecord IS RECORD(
          StudentID NUMBER(5),
          FirstName VARCHAR2(20),
          LastName VARCHAR2(20);
          /*Declare a variable of this type.*/
          v_StudentInfo t_StudentRecord;
          2.2 記錄賦值
          可以用SELECT語句向記錄賦值,這將會(huì)從數(shù)據(jù)庫(kù)中檢索數(shù)據(jù)并將該數(shù)據(jù)存儲(chǔ)到記錄中。注意的是,記錄中字段應(yīng)該和查詢結(jié)果列表中的字段相匹配。
          SELECT studentID,firstName,lastName
          into v_StudentInfo
          from students where studentID=32;
          2.3 使用%ROWTYPE
          在PL/SQL中將一個(gè)記錄聲明為具有相同類型的數(shù)據(jù)庫(kù)行的作法是很常見的。PL/SQL提供了%ROWTYPE運(yùn)算符,使得這樣的操作更為方便。
          例如:
          DECLARE
          v_RoomRecord rooms%ROWTYPE;
          將定義一個(gè)記錄,該記錄中的字段將與rooms表中的列相對(duì)應(yīng)。

          posted on 2009-01-07 08:38 依然Fantasy 閱讀(1498) 評(píng)論(2)  編輯  收藏

          FeedBack:
          # re: Oracle PL/SQL使用%TYPE和%ROWTYPE[未登錄] 2009-10-16 18:35 z
          說的不清不楚就不要發(fā)到網(wǎng)上啦。  回復(fù)  更多評(píng)論
            
          # re: Oracle PL/SQL使用%TYPE和%ROWTYPE[未登錄] 2009-12-27 16:13 hehe
          人家說的很清楚, 只不過你理解力還差些!  回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 大埔县| 马山县| 成武县| 邢台市| 沈阳市| 特克斯县| 奉节县| 曲周县| 托克托县| 会同县| 墨脱县| 榆中县| 聂拉木县| 澳门| 台前县| 军事| 常熟市| 大宁县| 万全县| 屏山县| 九江市| 寻甸| 若尔盖县| 五家渠市| 凤翔县| 临安市| 开阳县| 蒙城县| 临洮县| 松江区| 同仁县| 抚顺县| 清丰县| 太保市| 夏邑县| 六枝特区| 民乐县| 桐庐县| 龙泉市| 永丰县| 安丘市|