Oracle PL/SQL中如何使用%TYPE和%ROWTYPE (轉(zhuǎn)載)
1. 使用%TYPE
在許多情況下,PL/SQL
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ì)象(過程、
使用%TYPE是非常好的編程風(fēng)格,因?yàn)樗沟肞L/SQL更加靈活,更加適應(yīng)于
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表中不同的
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ù)并將該
SELECT studentID,firstName,lastName
into v_StudentInfo
from students where studentID=32;
2.3 使用%ROWTYPE
在PL/SQL中將一個(gè)記錄聲明為具有相同類型的數(shù)據(jù)庫(kù)行的作法是很常見的。PL/SQL提供了%ROWTYPE
例如:
DECLARE
v_RoomRecord rooms%ROWTYPE;
將定義一個(gè)記錄,該記錄中的字段將與rooms表中的列相對(duì)應(yīng)。