【文章內(nèi)容簡(jiǎn)介】
NING 子句是應(yīng)注意以下幾點(diǎn)限制:1. 不能并行DML語(yǔ)句和遠(yuǎn)程對(duì)象一起使用;2. 不能檢索LONG 類型信息;3. 當(dāng)通過(guò)視圖向基表中插入數(shù)據(jù)時(shí),只能與單基表視圖一起使用。例2. 修改一條記錄并顯示DECLARE Row_id UROWID。 info VARCHAR2(40)。BEGIN UPDATE dept SET deptno=80 WHERE DNAME=‘SERVICE’ RETURNING rowid, dname||’:’||to_char(deptno)||’:’||loc INTO row_id, info。 (‘ROWID:’||row_id)。 (info)。END。其中:RETURNING子句用于檢索被修改行信息:當(dāng)UPDATE語(yǔ)句修改單行數(shù)據(jù)時(shí),RETURNING 子句可以檢索被修改行的ROWID和REF值,以及行中被修改列的列表達(dá)式, 8 9并可將他們存儲(chǔ)到PL/SQL變量或復(fù)合變量中;當(dāng)UPDATE語(yǔ)句修改多行數(shù)據(jù)時(shí),RETURNING 子句可以將被修改行的ROWID和REF值,以及列表達(dá)式值返回到復(fù)合變量數(shù)組中。在UPDATE中使用RETURNING 子句的限制與INSERT語(yǔ)句中對(duì)RETURNING子句的限制相同。例3. 刪除一條記錄并顯示DECLARE Row_idUROWID。 info VARCHAR2(40)。BEGIN DELETE dept WHERE DNAME=‘SERVICE’ RETURNING rowid, dname||’:’||to_char(deptno)||’:’||loc INTO row_id, info。 (‘ROWID:’||row_id)。 (info)。END。其中:RETURNING子句用于檢索被修改行信息:當(dāng)UPDATE語(yǔ)句修改單行數(shù)據(jù)時(shí),RETURNING 子句可以檢索被修改行的ROWID和REF值,以及行中被修改列的列表達(dá)式,并可將他們存儲(chǔ)到PL/SQL變量或復(fù)合變量中;當(dāng)UPDATE語(yǔ)句修改多行數(shù)據(jù)時(shí),RETURNING 子句可以將被修改行的ROWID和REF值,以及列表達(dá)式值返回到復(fù)合變量數(shù)組中。在UPDATE中使用RETURNING 子句的限制與INSERT語(yǔ)句中對(duì)RETURNING子句的限制相同。167。 復(fù)合類型 ORACLE 在 PL/SQL 中除了提供象前面介紹的各種類型外,還提供一種稱為復(fù)合類型的類型記錄和表.167。 記錄類型記錄類型是把邏輯相關(guān)的數(shù)據(jù)作為一個(gè)單元存儲(chǔ)起來(lái),它必須包括至少一個(gè)標(biāo)量型或RECORD 數(shù)據(jù)類型的成員,稱作PL/SQL RECORD 的域(FIELD),其作用是存放互不相同但邏輯相關(guān)的信息。定義記錄類型語(yǔ)法如下:TYPE record_type IS RECORD(Field1 type1 [NOT NULL] [:= exp1 ],Field2 type2 [NOT NULL] [:= exp2 ],. . . . . .Fieldn typen [NOT NULL] [:= expn ] ) 。例4 : 9 =================================================================10DECLARETYPE test_rec IS RECORD( Code VARCHAR2(10), Name VARCHAR2(30) NOT NULL :=’a book’)。 V_booktest_rec。BEGIN :=’123’。 :=’C++ Programming’。 (||)。END??梢杂?SELECT語(yǔ)句對(duì)記錄變量進(jìn)行賦值,只要保證記錄字段與查詢結(jié)果列表中的字段相配即可。167。 使用%TYPE定義一個(gè)變量,其數(shù)據(jù)類型與已經(jīng)定義的某個(gè)數(shù)據(jù)變量的類型相同,或者與數(shù)據(jù)庫(kù)表的某個(gè)列的數(shù)據(jù)類型相同,這時(shí)可以使用%TYPE。使用%TYPE特性的優(yōu)點(diǎn)在于:amp。1048698。 所引用的數(shù)據(jù)庫(kù)列的數(shù)據(jù)類型可以不必知道;amp。1048698。 所引用的數(shù)據(jù)庫(kù)列的數(shù)據(jù)類型可以實(shí)時(shí)改變。例5:DECLARE 用 %TYPE 類型定義與表相配的字段TYPE t_Record IS RECORD( T_no %TYPE, T_name%TYPE, T_sal %TYPE )。 聲明接收數(shù)據(jù)的變量 v_emp t_Record。BEGIN SELECT empno, ename, sal INTO v_emp FROM emp WHERE empno=7788。 (TO_CHAR()||||TO_CHAR())。END。例6:DECLARE v_empno %TYPE :=amp。empno。 Type r_record is record ( v_name%TYPE, v_sal %TYPE, v_date%TYPE)。 Rec r_record。 10 ======================================================11BEGIN SELECT ename, sal, hiredate INTO Rec FROM emp WHERE empno=v_empno。 (||39。39。||||39。39。||)。END。167。 使用%ROWTYPEPL/SQL 提供%ROWTYPE操作符, 返回一個(gè)記錄類型, 其數(shù)據(jù)類型和數(shù)據(jù)庫(kù)表的數(shù)據(jù)結(jié)構(gòu)相一致。使用%ROWTYPE特性的優(yōu)點(diǎn)在于:amp。1048698。 所引用的數(shù)據(jù)庫(kù)中列的個(gè)數(shù)和數(shù)據(jù)類型可以不必知道;amp。1048698。 所引用的數(shù)據(jù)庫(kù)中列的個(gè)數(shù)和數(shù)據(jù)類型可以實(shí)時(shí)改變。例7:DECLARE v_empno %TYPE :=amp。empno。 rec emp%ROWTYPE。BEGIN SELECT * INTO rec FROM emp WHERE empno=v_empno。 (39。姓名:39。||||39。工資:39。||||39。工作時(shí)間:39。||)。END。167。 LOB類型*ORACLE提供了LOB (Large OBject)類型,用于存儲(chǔ)大的數(shù)據(jù)對(duì)象的類型。ORACLE目前主要支持BFILE, BLOB, CLOB 及 NCLOB 類型。BFILE (Movie)存放大的二進(jìn)制數(shù)據(jù)對(duì)象,這些數(shù)據(jù)文件不放在數(shù)據(jù)庫(kù)里,而是放在操作系統(tǒng)的某個(gè)目錄里,數(shù)據(jù)庫(kù)的表里只存放文件的目錄。BLOB(Photo)存儲(chǔ)大的二進(jìn)制數(shù)據(jù)類型。變量存儲(chǔ)大的二進(jìn)制對(duì)象的位置。大二進(jìn)制對(duì)象的大小NCLOB存儲(chǔ)大的NCHAR字符數(shù)據(jù)類型。每個(gè)變量存儲(chǔ)大字符對(duì)象的位置,該位置指到大字符數(shù)據(jù)塊。大字符對(duì)象的大小167。 Bind 變量綁定變量是在主機(jī)環(huán)境中定義的變量。在PL/SQL 程序中可以使用綁定變量作為他們將要使用的其它變量。為了在PL/SQL 環(huán)境中聲明綁定變量,使用命令VARIABLE。例如: 11 12VARIABLE return_code NUMBERVARIABLE return_msgVARCHAR2(20)可以通過(guò)SQL*Plus命令中的PRINT 顯示綁定變量的值。例如:PRINT return_codePRINT return_msg例7: VARIABLE result NUMBERBEGIN SELECT (sal*12)+nvl(m, 0) INTO :result FROM emp WHERE empno=7788。END。PRINT result167。 INDEX BY TABLES包括兩個(gè)基本成分:.?dāng)?shù)據(jù)處理類型為BINARY_INTEGER主鍵。.標(biāo)量或記錄數(shù)據(jù)類型的列.TYPE type_name IS TABLE OF{column_type | variable%TYPE | %TYPE } [NOT NULL] | table%ROWTYPE[ INDEX BY BINARY_INTEGER]。方法描述EXISTS(n) Return TRUE if the nth element in a PL/SQL table exists。COUNT Returns the number of elements that a PL/SQL table currently contains。FIRSTLAST Return the first and last (smallest and lastest) index numbers in aPL/SQL table. Returns NULL if the PL/SQL table is empty.PRIOR(n) Returns the index number that precedes index n in a PL/SQL table。NEXT(N) Returns the index number that succeeds index n in a PL/SQL table。TRIMTRIM removes one element from the end of a PL/SQL table.TRIM(n) removes n element from the end of a PL/SQL table.DELETEDELETEremoves all elements from a PL/SQL table.DELETE(n) removes the nth elements from a PL/SQL table.DELETE(m, n) removes all elements in the range m to n from a PL/SQLtable.例8:DECLARE TYPE dept_table_type IS TABLE OF dept%ROWTYPE INDEX BY BINARY_INTEGER。 my_dname_table dept_table_type。 v_count number(2) :=4。BEGIN FOR int IN 1 .. v_count LOOP SELECT * INTO my_dname_table(int) FROM dept WHERE deptno=int*10。 END LOOP。 FOR int IN .. LOOP (‘Department number: ‘||my_dname_table(int).deptno)。 (‘Department name: ‘|| my_dname_table(int).dname)。 END LOOP。END。167。 數(shù)據(jù)類型的轉(zhuǎn)換*隱式類型轉(zhuǎn)換BIN_INTCHARDATELONGNUMBERPLS_INTUROWIDVARCHAR2BIN_INT CHAR DATE LONG NUMBER RAW UROWID VARCHAR2 167。 運(yùn)算符和表達(dá)式(數(shù)據(jù)定義)167。 關(guān)系運(yùn)算符運(yùn)算符意義=等于, != , ~= , ^=不等于大于=大于或等于167。 一般運(yùn)算符運(yùn)算符意義+加號(hào)減號(hào)*乘號(hào)/除號(hào):=賦值號(hào)=關(guān)系號(hào) 13 14..范圍運(yùn)算符||字符連接符167。 邏輯運(yùn)算符運(yùn)算符意義IS NULL是空值BETWEEN介于兩者之間IN在一列值中間AND邏輯與OR邏輯或NOT取返,如IS NOT NULL, NOT IN167。 變量賦值在PL/SQL編程中,變量賦值是一個(gè)值得注意的地方,它的語(yǔ)法如下:variable := expression 。variable 是一個(gè)PL/SQL變量, expression 是一個(gè)PL/SQL 表達(dá)式.167。 字符及數(shù)字運(yùn)算特點(diǎn)空值加數(shù)字仍是空值:NULL += NULL空值加(連接)字符,結(jié)果為字符:NULL ||= 167。 BOOLEAN 賦值布爾值只有TRUE, FALSE及 NULL 三個(gè)值。如:DECLARE done BOOLEAN。 /* the following statements ar