隨筆 - 9  文章 - 5  trackbacks - 0
          <2009年12月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          Oracle PL/SQL中如何使用%TYPE和%ROWTYPE (轉(zhuǎn)載)
          1. 使用%TYPE
          在許多情況下,PL/SQL變量可以用來存儲(chǔ)在數(shù)據(jù)庫表中的數(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ù)庫定義的更新。
          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ù)庫中檢索數(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ù)庫行的作法是很常見的。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)航:
           
          主站蜘蛛池模板: 开化县| 莱西市| 通州区| 汾西县| 安龙县| 克拉玛依市| 武隆县| 安吉县| 大荔县| 东丽区| 保康县| 图们市| 镇康县| 合江县| 乃东县| 翁源县| 潢川县| 仙居县| 牙克石市| 香港| 岱山县| 兴化市| 晋中市| 宁陕县| 获嘉县| 连江县| 法库县| 施秉县| 大港区| 淮安市| 吴桥县| 威海市| 承德县| 常州市| 宜君县| 城步| 吉安市| 松滋市| 陆丰市| 张掖市| 阜新|