【文章內(nèi)容簡介】
NC] COLUMN | EXPRESSION [ALIAS] ,….} FROM TABLE_NAME [WHERE CONDITION][GROUP BY COLUMNS ] [HAVING CONDITION] [ORDER BY COLUMNS]; 更多復(fù)雜的SQL語句高級查詢;INSERT結(jié)構(gòu):INSERT INTO TABLE_NAME (COLUMNLIST ) VALUES (VALUELIST)。插入來自其他表(查詢)中的數(shù)據(jù):INSERT INTO TABLE_NAME (COLUMNLIST ) SELECT *| {[DISTINC] COLUMN | EXPRESSION [ALIAS] ,….} FROM TABLE_NAME [WHERE CONDITION][GROUP BY COLUMNS ] [HAVING CONDITION] [ORDER BY COLUMNS];UPDATE結(jié)構(gòu)1:UPDATE TABLE_NAME SET COLUM1= VALUE1 ,COLUMN2=VALUE2 … [WHERE CONDITION ]結(jié)構(gòu)2:UPDATE TABLE_NAME SET (COLUMNLIST) = (VALUELIST ) [WHERE CONDITION ]Merge 合并處理將表A的數(shù)據(jù)合并到表B中,如果存在就修改,如果不存在就添加。其中B表一定是一張可修改或添加的表,而A表則可以是表或視圖組成的查詢語句。語法:MERGE INTO TABLE_B BUSING TABLE_A ON ( CONDITION )WHEN MATCHED THEN UPDATE SET =, =’常量’ 。WHEN NOT MATCHED THEN INSERT (, ,…) VALUES(,OTHER_VALUES)。注解:MERGE INTO 指明了目標(biāo)表USING TABLE_NAME ON 指明的源表以及連接關(guān)系WHEN MATCHED THEN 表明如果存在匹配行(一行或多行)則進(jìn)行修改, WHEN NOT MATCHED THEN表明如果沒有匹配行 則進(jìn)行添加語句當(dāng)然在WHEN MATCHED THEN、WHEN NOT MATCHED THEN之下可以寫任何其他代碼。DELETE DELETE [FROM ] TABLE_NAME [WHERE CODITION ]。 RETURNING 可以與INSERT ,DELTE ,UPDATE 聯(lián)合使用以返回當(dāng)前修改的記錄中字段的值 ,或統(tǒng)計(jì)所影響的其他項(xiàng)。例:可以返回自動(dòng)生成的某些列的值 INSERT INTO TB_USER (USER_NAME,USER_SEX) VALUES (39。李明39。,39。男39。) RETURNING USER_ID, ROWID INTO V_USERID,V_ROWID。 可以返回聚合函數(shù)計(jì)算的結(jié)果。 UPDATE TB_USER SET USER_AGE+1 WHERE USER_AGE=25 RETURNING AVG(USER_AGE) INTO V_AVGAGE。 oracle特殊字符處理使用方式Select chr(13) 回車 from dual。高級數(shù)據(jù)庫類型屬性類型%TYPE 引用某個(gè)表字段或變量的類型。這樣的優(yōu)點(diǎn)是:1不需要知道被引用變量或字段是什么類型。2如果被引用的類型修改,而此PL/SQL在運(yùn)行時(shí)會(huì)將變量的數(shù)據(jù)類型進(jìn)行同步。 例: V_TEMP1 VARCHAR2(20)。 V_TEMP2 V_TEMP1%TYPE。//表示V_TEMP2的數(shù)據(jù)類型與V_TEMP1是一樣的V_TEMP3 %TYPE。//表示V_TEMP3的數(shù)據(jù)類型與表TB_USER中USER_AGE類型是一樣的。 %ROWTYPE 提供表示表中一行的數(shù)據(jù)類型,可直接從表或游標(biāo)中得到一行的數(shù)據(jù)記錄。如果返回空行則會(huì)報(bào)NOT_DATA_FOUND的錯(cuò)誤。例: V_TEMP1 TB_USER%ROWTYPE。 SELECT * INTO V_TEMP1 FROM TB_USER WHERE UID=’1’ 。//注意只能返回一行。 通過‘.’方式使用V_TEMP1類型變量: 。記錄類型將數(shù)據(jù)以類似于結(jié)構(gòu)的方式進(jìn)行定義。將一些可歸類的屬性用統(tǒng)一的數(shù)據(jù)類型管理。DECLARE TYPE A IS RECORD ( STD_SPEC VARCHAR2(60), STD_SPEC_YY VARCHAR2(4), CISHU VARCHAR(5) )。 BB TB_QS100%ROWTYPE。 B A 。 I INTEGER。BEGIN TEST STATEMENTS HERE SELECT STD_SPEC,STD_SPEC_YY,CISHU INTO B FROM TB_QS100 WHERE ROWNUM =1。 SELECT * INTO BB FROM TB_QS100 WHERE ROWNUM =1。 ()。 ()。 END。集合類型 在ORACLE中集合類型有:1數(shù)組?。病∏短妆?3 集合 索引表變長數(shù)組嵌套表存在于內(nèi)存中存在于內(nèi)存中存在于內(nèi)存中不限制上下限,其數(shù)據(jù)類型在聲明時(shí)就指定了。內(nèi)存分配是不連續(xù)的。只有在為其進(jìn)行了賦值,才會(huì)為其分配內(nèi)存。存在上限1下限用戶自定義內(nèi)存分配是連續(xù)的,并在聲明時(shí)就進(jìn)行了統(tǒng)一分配內(nèi)存。在聲明時(shí)就要對其進(jìn)行初始化。以鍵與值的關(guān)系進(jìn)行數(shù)據(jù)映射。如果引用沒有賦值的鍵將報(bào)NOT_DATA_FOUND錯(cuò)誤,可以通過捕捉異常或用EXISTS來判定鍵是否存在.以下標(biāo)進(jìn)行數(shù)據(jù)映射可以將定義的嵌套表類型寫入數(shù)據(jù)庫其操作是DECLARE I INTEGER。 先定義索引表數(shù)據(jù)類型 TYPE MYINDEXTABLE1 IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER。 TYPE MYINDEXTABLE2 IS TABLE OF TB_QS100%ROWTYPE INDEX BY BINARY_INTEGER。 聲明索引表數(shù)據(jù)類型的變量 MYIN1 MYINDEXTABLE1。 MYIN2 MYINDEXTABLE2。BEGIN 賦值 MYIN1(1) := 39。中國39。 MYIN1(1) := 39。小日本39。 (MYIN1(1) || 39。*****39。 || MYIN1(1))。 MYIN1(1) := 39。中國人民39。 (MYIN1(1))。 MYIN1(1) := NULL。 (MYIN1(1))。 MYIN2(1).STD_SPEC :=39。Q235B39。 MYIN2(1).STD_SPEC_YY:=39。200739。 MYIN2(2).STD_SPEC :=39。Q235A39。 MYIN2(2).STD_SPEC_YY:=39。200839。 (MYIN2(2).STD_SPEC)。 通過處理異?;駿XISTS 來判定鍵是否存在 IF (1) THEN (MYIN2(1).STD_SPEC)。 END IF。 BEGIN (MYIN2(1).STD_SPEC)。 EXCEPTION WHEN NO_DATA_FOUND THEN (39。沒有指定的鍵39。)。 END 。 END。DECLARE I INTEGER。 建立類型 TYPE MYARRAY IS VARRAY(12) OF VARCHAR2(200) NOT NULL 。 與其他子類型是一樣的NOT NULL 表示不能將NULL賦予他 TYPE MYARRAY2 IS VARRAY (10) OF TB_QS100%ROWTYPE。 聲明變量 MYA MYARRAY 。 MYB MYARRAY2 。BEGIN 一定要用構(gòu)造函數(shù)對其進(jìn)行初始化 MYA :=MYARRAY(39??梢允且粋€(gè)參數(shù)39。,39。也可以多個(gè)參數(shù)39。,39。也可以是NULL39。)。 (MYA(1)||39。****39。||MYA(3))。 MYA(4):=39。12339。這樣賦值是非法的,要對變長數(shù)組的賦值要用EXTEND EXTEND(N) 的N只能=12 EXTEND(N,M)表示向集合后添加N個(gè)第M個(gè)元素的副本 (1) 。 MYA(4):=39。這是第四個(gè)參元素39。 (MYA(4))。 刪除變長數(shù)組中的元素,刪除其占用的內(nèi)存空間 DELETE () 表示刪除內(nèi)所有元素 DELETE(N) 刪除第N個(gè)下標(biāo)位置的元素. DELETE(N,M) 刪除從N到M的下標(biāo)元素,如果NM或者N,M都沒有指定一個(gè)元素則將不作任何操作, (1,2)。 (MYA(4))。END。DECLARE TYPE NAMES IS TABLE OF VARCHAR2(30)。 TYPE CLASSES IS TABLE OF %TYPE。 CURSOR MYCURSOR IS SELECT NAMES, CLASSES_NO FROM STUDENTS。 V_NAMES NAMES 。 V_CLASSES_NO CLASSES。BEGINOPEN OPEN MYCURSOR 。FETCH FETCH MYCURSOR BULK COLLECT INTO V_NAMES, V_CLASSES_NO。CLOSECLOSE MYCURSOR。USER TABLE_ZONEFOR I IN 1..LOOP(V_NAMES(I)||39。++39。||V_CLASSES_NO(I))。END LOOP。 END 。 會(huì)對其鍵進(jìn)行排序可一次性能將查詢或游標(biāo)中的數(shù)據(jù)全部讀取出來 對集合進(jìn)行操作可以用到方法1集合方法是不可以用sql語句進(jìn)行直接調(diào)用的。方法名用法說明注解Exist 返回集合的值是否存在 返回true/ false Count返回集合中日前的元素個(gè)數(shù)。對于變長數(shù)組其值永遠(yuǎn)等于last 而嵌套則可以小于lastLimit返回變長數(shù)組的上限而嵌套表是沒有上限的所有返回nullFirstLast 返回最數(shù)組的最后一個(gè)元素的索引Next (n)返回第n個(gè)下標(biāo)或鍵后的下一個(gè)鍵或下標(biāo)prior(n)返回第n個(gè)下標(biāo)或鍵前的下一個(gè)鍵或下標(biāo)Extend()(n)(n,m)在集合后添加一個(gè)空元素在集合后添加n個(gè)元素在集合后添加n個(gè)第m個(gè)元素的副本Delete ()(n)(n,m)刪除所元素刪除下標(biāo)或鍵為n的元素?cái)?shù)據(jù)中的數(shù)組可以作為一個(gè)數(shù)據(jù)類添加到數(shù)據(jù)庫中,如:1先在數(shù)據(jù)中建立一個(gè)數(shù)組的數(shù)組類型。create type my_arrary as array(10) of tb_qs100。 可以是自定義的子類型2在建表時(shí)使用其數(shù)組的數(shù)所類型。create table Q ( user_id varchar2(20), user_note my_arrary)。3 寫入數(shù)據(jù)、4 讀取數(shù)據(jù)、5 修改數(shù)據(jù) 均可以PL/SQL進(jìn)行。自定義數(shù)據(jù)類型系統(tǒng)類型的子類型定義現(xiàn)在類型的子類型,以提供更為精確的操作數(shù)據(jù)。子類型并不是一種真的新類型,,不同的子類若其父類型一致并在精度可允許的范圍內(nèi)可以進(jìn)行互換值。如: SUBTYPE MYBIRTHDATE IS DATE NOT NULL 。生日不為這空 SUBTYPE MYNAME IS VARCHAR2(12) NOT NULL。名字長度最大小于12不以為空 SUBTYPE MYT IS TB_QC120%ROWTYPE。 SUBTYPE MYT IS %TYPE。 使用 MYN MYNAME DEFAULT 39。WZ39。 。變量MYN一定要初值(是由子類型決定的) MYB MYBIRTHDATE :=SYSDATE。變量MYB 一定要初值(是由子類型決定的)將定義數(shù)據(jù)類型升級成數(shù)據(jù)系統(tǒng)類型如果想要自定義數(shù)據(jù)級別的子類型只要用以下方式,就可以像其他數(shù)據(jù)庫中其他的數(shù)所類型一樣使用:Create TYPE SUBTYPE_NAME IS PTYPE 。CREATE TPYE MYVARCHAR2 IS VARCHAR2(200) NOT NULL。 ORACLE函數(shù)字符函數(shù)函數(shù)說明例示ASCII轉(zhuǎn)換成ASCII值 ASCIISTR轉(zhuǎn)換成ASCIISTR表示的字符值 CHR給出整數(shù),返回對應(yīng)的字符CHR(12) 返回空行COMPOSE、VARCHARNCHAR、NVARCHARCLOB或NCLOB類型CONCAT連接兩個(gè)字符串 ||連接