一.Oracle數(shù)據(jù)類型 二.Oracle中的sql操作符
三.SQL函數(shù) rank () over ([partition by column] order by clause[,多列] [desc|esc])<column指定分組列名,clause指定排列列名>:計算一個值在一組值中的排位,排位是以1開頭的連續(xù)整數(shù),具有相等值的行排 dense_rank() over ([partition by column] order by clause[,多列] [desc|esc])<column指定分組列名,clause指定排列列名>:計算一個行在一組有序行中的排位,排位是以1開頭的連續(xù)整數(shù),具有相同 四.Oracle鎖 .>添加分區(qū) alter table ... ADD partition語句用于在現(xiàn)所有的最后一個分區(qū)(稱為'高'端)之后添加新的分區(qū)。 例: alter table sales add partitions p4 values less than (4000); .>刪除分區(qū) alter table ... drop partition 語句用于刪除分區(qū)。(刪除分區(qū)時,分區(qū)中的數(shù)據(jù)也隨之刪除) 例: alter table sales drop partition p4; .>截斷分區(qū) alter table ... truncate partition 語句用于截斷分區(qū),截斷分區(qū)將刪除分區(qū)中的所有記錄。 例: alter table sales truncate partition p3; .>合并分區(qū) 合并分區(qū)可將范圍分區(qū)表或復合分區(qū)表的兩個相鄰分連接起來。結(jié)果分區(qū)將繼承被合并的兩個分區(qū)的較高上界。 語法: alter table table_name merge partitions partitions1_name,partitions2_name into partition3_name; 其中: table_name:是表名。 partitions1_name,partitions2_name:是已有分區(qū)。 partitions3_name:合并到分區(qū)的名稱。 .>拆分分區(qū) 使用split partition語句在表的開頭或中間添加分區(qū)。拆分分區(qū)允許用戶將一個分區(qū)拆分為兩個分區(qū)。當分區(qū)過大,可以對分區(qū)進行拆分。 語法: alter table table_name split partition partiton_name at (value) into (partition partiton1,partition partiton2); 其中: table_name:是表名。 partiton_name:已有分區(qū)名。 value:拆分分隔值。 partition partiton1,partition partiton2:表示拆分后的新分區(qū)。 六.同義詞 同義詞是數(shù)據(jù)庫對像的一個別名,這些對象可以是表,視圖,序列,過程,函數(shù),程序包,甚至其他同義詞。 同義詞用途: { .. 簡化sql語句 .. 隱藏對象的名稱和所有者 .. 為分布式數(shù)據(jù)庫的遠程對象提供了位置透明性 .. 提供對象的公共訪問 } 同義詞允許應用程序訪問數(shù)據(jù)庫對象,不論哪個用戶或哪個數(shù)據(jù)庫擁有該對象。但是同義詞不能代替權限,在使用同義詞前要確保用戶已得到訪問對象的權限。 可以通過同義詞執(zhí)行select,insert,update,delete,lock table,grant和revoke等語句。同義詞只是表的一個別名,因此對它的所有操作都會影響到表。 .>私有同義詞 私有同義詞只能被當前模式的用戶訪問。 私有同義詞名稱不可與當前模式的對象名稱相同。 要在自身的模式創(chuàng)建私有同義詞,用戶必須擁有create sysnonym系統(tǒng)權限。 要在其他用戶模式創(chuàng)建同義詞,用戶必須擁有create any synonym系統(tǒng)權限。 語法: create [or replace] synony [schema.]synonym_name for [schema.]object_name 其中: or relaoce:表示在同義詞存在的情況下替換該同義詞。 synonym_name:表是要創(chuàng)建的同義詞的名稱。 object_name:指定要為之創(chuàng)建同義詞的對象的名稱。 .>公有同義詞 公有同義詞可被所有的數(shù)據(jù)庫用戶訪問。 創(chuàng)建公有同義詞,用戶必須擁有greate public synonym系統(tǒng)權限。 create [or replace] public synonym synonym_name for [schema.]object_name 其中: or relaoce:表示在同義詞存在的情況下替換該同義詞。 synonym_name:表是要創(chuàng)建的同義詞的名稱。 object_name:指定要為之創(chuàng)建同義詞的對象的名稱。 <*>刪除同義詞 drop synonym語句用于從數(shù)據(jù)庫中刪除同義詞。要刪除同義詞用戶必須有相應的權限。 語法: drop [public] synonym [schema.]synonym_name; 七.序列 序列是用來生成唯一,連續(xù)的整數(shù)的數(shù)據(jù)庫對象。 序列通常用來自動生成主鍵或唯一的值。 序列可以按升序排列,也可以按降序排列。 語法: create sequence sequence_name [stare with integer] [increment by integer] [maxvalue integer|nomaxvalue] [minvalue integer|nominvalue] [cycle|nocycle] [cache integer|nocache]; 其中: sequence_name:是創(chuàng)建的序列名稱。 stare with:指定要生成的第一個序列號。 increment by:用于指定序列好之間的間隔。 maxvalue:指定序列可以生成的最大值。 nomaxvalue:如果指定了nomaxvalue,oracle將升序序列的最大值設為10的27次方;將降序序列的最大值設為-1。 minvalue:指定序列可以生成的最小值。 nominvalue:無最小值,oracle將升序序列的最小值設為1;將降序序列的最小值設為10的-26次方。 cycle:指定序列在達到最大值或最小值后,將繼續(xù)從頭開始生成值。 nocycle:指定序列在達到最大值或最小值后,將不能在繼續(xù)生成值。這是默認選項。 cyche:使用cyche選項可以預先分配一組序列號,并將其保存在內(nèi)存中。這樣可以更快地訪問序列號,但用完緩存中的所有序列號,Oralce將生成另一組數(shù)值,并將其保留在緩存中。 nocyche:不緩存序列號。 如果創(chuàng)建序列時忽略了cyche和nocyche選項,Oracle將默認緩存20個序列號。 <*>訪問序列 語法; sequence_name . nextval|currval 其中: sequence_name:是已創(chuàng)建的序列名稱。 nextvla:創(chuàng)建序列后第一次使用nextval時,將返回該序列的初始值。以后在引用nextval時,將使用increment by子句的值來增加序列值,并返回這個新值。 currval:返回序列的當前值。 <*>更改序列 alter sequence 命令用于修改序列的定義。 { .. 設置或刪除minvalue或maxvale。 .. 修改增量值。 .. 修改緩存中的序列號的數(shù)目。 } 語法: alter sequence [schema.]sequence_name [increnment by integer] [maxvalue integer|nomaxvalue] [minvalue integer|nomaxvalue] [cycle|nocycle] [cache ingeter|nocache]; 注意:不能修改序列的start with參數(shù)。 <*>刪除序列 drop sequence命令用于刪除序列。 語法: drop sequence 序列名 八.視圖 視圖一經(jīng)過定制的方式顯示包含愛一個或多個表(或其他視圖)中的數(shù)據(jù)。 語法: create [or replace] [force|noforce] view view_name [(alias[,alias]...)] as select_statement [with check option [constraint constraint]] [with read on 其中: or relaoce:表示在視圖存在的情況下替換該視圖。 force:無論基表是否存在,都將創(chuàng)建視圖。 noforce:僅當基表存在才創(chuàng)建視圖。 view_name:創(chuàng)建視圖的名稱。 alias:指定有視圖的查詢所選擇的表達式或列的別名。別名的數(shù)目必須與視圖所選擇的表達式的數(shù)目相匹配。 select_statement:表示select語句。 with check option:指定只能插入或更新視圖可以訪問的行。術語constraint表示check option約束指定的名稱。 with read on <*>在視圖上使用DML語句的限制: > 在視圖中使用DML語句只能修改一個底層的基表。 > 如果記錄的修改違反了基表的約束條件,則無法更新視圖。 > 如果創(chuàng)建的視圖包含連接運算符,distinct運算符,集合運算符,聚合運算符和Group by子句,則無法更新視圖。 > 如果創(chuàng)建的視圖包含偽劣或表達式,則將無法更新視圖。 <*>鍵保留表 在聯(lián)結(jié)視圖中,如果視圖包含了一個表的主鍵,并且也是這個視圖的主鍵,則這個鍵被保留,這個表稱為鍵保留表。 <*> 刪除試圖 語法: drop view 視圖名稱 九.索引 索引只是一種快速訪問數(shù)據(jù)的途徑,它只影響執(zhí)行的速度。 .>唯一索引 索引可以是唯一的,也可以是非唯一的。唯一索引可以確保在定義索引的列中,表的任意兩個值都不相同。 語法: create unique index 索引名 on 表名(唯一列名); 其中: unique:指定為唯一索引。 .>組合索引 組合索引是在表中的多列上創(chuàng)建的索引。 語法: create index 索引名 on 表名(列名,列名); .>反向鍵索引 可以在create index語句中指定關鍵字Reverse創(chuàng)建反向鍵索引。 語法: create index 索引名 on 表名(列名) reverse; 其中: reveerse:指定為反向鍵索引。 使用noreverse可以將反向鍵索引重建為標準索引。 例: alter index 索引名 rebuild noreverse; 注意: 不能將標準索引重建為反向鍵索引。 .>位圖索引 使用位圖索引的優(yōu)點在于,它最適用于低基數(shù)列,也就是不同值的數(shù)目比表的行數(shù)少的列(枚舉列)。 語法: create bitmap index 索引名 on 表名 (列名); 其中: bitmap:指定為位圖索引。 <*>位圖索引優(yōu)點 > 對于大批即席查詢,可以減少響應時間。 > 相比其他索引技術,占用空間明顯減少。 > 即使在配置很低的終端硬件上,也嫩個獲得顯著的性能。 .>索引組織表 索引組織表與普通表的不同之處在于,該表的數(shù)據(jù)存儲在與關聯(lián)的索引中。對表數(shù)據(jù)進行的修改,如添加新行,更新和刪除行,只會導致對索引的更新。 語法: create table 表名 ( 列名 類型 primary key, ... ) organization index; 其中: organization index: 指定為索引組織表。 <*>注釋 primary key是創(chuàng)建索引組織表所必需的。 .>索引中分區(qū) > 局部分區(qū)索引 局部分區(qū)索引是在分區(qū)表上創(chuàng)建的一中索引,在局部分區(qū)中Oracle為表的每個分區(qū)建立一個獨立的索引。 語法: create index 索引名 on 表名(列名) local; 其中: local:指定為本地分區(qū)創(chuàng)建索引。 > 全局分區(qū)索引 全局分區(qū)索引是指在分區(qū)表或非分區(qū)表上創(chuàng)建的索引。 語法: create index 索引名 on 表名(列名) global partition on ( ...分區(qū) ) 其中: global:指定為全局分區(qū)創(chuàng)建索引。 >全局非分區(qū)索引 全局非分區(qū)索引是在分區(qū)表上創(chuàng)建的全局索引,它類似于非分區(qū)表上的索引,索引的結(jié)構不會被分割。 十.pL/Sql編程 優(yōu)點: >支持sql。 >支持面向?qū)ο缶幊?oop)。 >更好的性能。 >可移植性。 >與sql集成。 >安全性。 <*> PL/SQL塊 >聲明塊:聲明塊中使用的變量,游標和自定義異常。這些聲明的作用域僅限于它們所在的塊。此外,局部子程序也可以在PL/SQL塊的聲明部分中聲明。 >可執(zhí)行部分:執(zhí)行命令并操作在聲明部分聲明的變量和游標。 >異常處理部分:處理執(zhí)行塊時引發(fā)的異常。 pl/sql塊聲明語法: [declare 所有聲明] begin 執(zhí)行語句 [exception 異常處理] end; >pl/sql對大小寫不敏感,但是用戶和用戶的開發(fā)團隊應該選擇一個合適的編碼標準,以確保最好的使用共享池。 >pl/sql中一些復合符號的含義: := 賦值操作符 || 連接操作符 -- 單行注釋 /*,*/ 多行注釋 <<,>> 標簽分隔符 .. 范圍操作符 ** 求冪操作符 <*>數(shù)據(jù)類型 標量數(shù)據(jù)類型 >數(shù)字數(shù)據(jù)類型 數(shù)字數(shù)據(jù)類型存儲的數(shù)據(jù)為數(shù)字,用此數(shù)據(jù)類型存儲的數(shù)據(jù)可用于計算。 數(shù)字類型包括: a: binary_integer { 用于存儲帶符號的整數(shù)。值的大小范圍介于-2的31次方減1到2的31次方減1之間。 binary_integer的子類型: .. natural:可以限制變量存儲非負整數(shù)值,即自然數(shù)。 .. naturaln:可以限制變量存儲自然數(shù),且非空。 .. positive:可以限制變量存儲正整數(shù)。 .. positiven:可以限制變量存儲正整數(shù),且非空。 .. signtype:可以限制變量只存儲-1,0和1三個值。 } b: number { 用于存儲整數(shù),定點數(shù)和浮點數(shù)。 語法: number[(presision,scale)] 其中: presision:是精度。 scale:是小數(shù)位數(shù)。 只能用整數(shù)文字指定精度和小數(shù)位數(shù),而不能用常量或變量指定精度和小數(shù)位數(shù)。 number數(shù)據(jù)類型的一些子類型包括: .. decimal:用于聲明最高精度為38位的十進制數(shù)字的定點數(shù)。 .. float:聲明最高精度為126位的二進制數(shù)字的浮點數(shù)。 .. ingeter:聲名最高精度為38為的十進制數(shù)字的整數(shù)。 .. real: 聲明最高精度為63位的二進制數(shù)字的浮點數(shù)。 } c: pls_integer { 存儲帶符號的整數(shù)。pls_integer的大小范圍介于-2的31次方到2的31次方之間。與number和binary_integer類型相比,它執(zhí)行運算的速度更快。 pls_integer運算以機器算術運算為基礎,而number和binary_integer運算以庫算術為基礎。此外,與number數(shù)據(jù)類型相比,pls_integer需要的 存儲空間更小。通常建議在執(zhí)行處于pls_integer的數(shù)值范圍類的所有計算時使用此數(shù)據(jù)類型以提高效率。 } >字符數(shù)據(jù)類型 字符數(shù)據(jù)類型勇于存儲字符串或字符數(shù)據(jù)。 a: char { 存儲固定長度的字符數(shù)據(jù)。(不超過32767個字節(jié)的最大長度) 語法: char[(maximum_size[char|btye])] 其中: maximum_size:是最大長度。 char|byte:指定長度為字符數(shù)或字節(jié)數(shù)。 } b: raw { 存儲二進制數(shù)據(jù)或字節(jié)串。(類似于char,不同之處是它們不在字符集中轉(zhuǎn)換) 語法: raw(maximum_size) 其中: miximum_size:是最大長度。(最大長度是32767個字節(jié)) } c:long和long Raw { pl/sql中 long類型是可變長度字符串。最大長度為32760個字節(jié)。類似Oralce中的varchar2。 long row類型類似于raw數(shù)據(jù)類型,存儲二進制數(shù)據(jù)或字節(jié)串,最大長度是32760個字節(jié)。 } d: varchar { 此類型可容納可變長度字符串。 語法: varchar2(maximum_size [char|byte]) 其中: maximum_size:是最大長度。 char|byte:指定長度為字符數(shù)或字節(jié)數(shù)。 varchar2類型的子類型包括: .. string .. varchar 子類型的數(shù)值范圍與基本類型相同。 } >日期時間數(shù)據(jù)類型 日期時間數(shù)據(jù)類型用于存儲日期和時間值。 a:date { 用于存儲固定長度的日期和時間數(shù)據(jù)。它支持的日期范圍為:從公元前(B.C.E)4712年1月1日到公元(C.E)9999年12月31日。 date數(shù)據(jù)類型包括時間。 日期函數(shù)sysdate返回當前日期和時間。 初使化參數(shù)NLS_DATE_FORMAT用于設置默認日期格式。 } b: timestamp { 用于存儲日期和時間。是date數(shù)據(jù)類型的擴展,它存儲年,月,日,小時,分鐘和秒。 日期函數(shù)SYSTIMESTAMP返回當前的日期時間信息。 語法: timestamp [(precision)] 其中: precision:是精度。它代表秒字段小數(shù)部分中的位數(shù)。必須使用0到9之間的整數(shù)文字。默認為6。 初使化參數(shù)NLS_TIMESTAMP_FORMAT用于設置默認的timestamp格式。 } >布爾數(shù)據(jù)類型 用于存儲邏輯值。 boolean { 用于存儲邏輯值true,false和null。 只允許對boolean變量執(zhí)行邏輯操作。 } lob類型 大對象(lob)數(shù)據(jù)類型用于存儲非結(jié)構化數(shù)據(jù)。大小限于4GB。DBMS_LOB程序包用于操作lob數(shù)據(jù)。 >bfile 用于將大型二進制對象存儲在操作系統(tǒng)文件中。即文件定位器。 定位器包含一個目錄的別名,用于指定目錄的完整路徑。 bfile數(shù)據(jù)類型的數(shù)據(jù)是只讀的,不能修改。 語法: bfilename('目錄別名','文件名') 其中: 目錄別名使用create directiry語句創(chuàng)建。 >blob 用于將大型二進制對象存儲在數(shù)據(jù)庫中。blob數(shù)據(jù)類型可用于事務處理。 例: 要在表中插入圖象,先使用create directory 目錄名 as '系統(tǒng)目錄';創(chuàng)建一個目錄名。 使用grant read on directory 目錄名 to 用戶;授予讀取權限。 declare l_bfile bfile; l_blob blob; begin insert into 表名('blob類型的列名') values (EMPTY_BLOB()) return 列名 into l_blob; l_bfile :=BFILENAME('目錄別名','文件名'); DBMS_LOB.OPEN(l_bfile,DDMS_LOB.FILE_READONLY); --打開文件 DBMS_LOB.LOADFROMFIFE(l_blob,l_bfile,DBMS_LOB.GETLENGTH(l_bfile)); --加載到l_blob變量中。 DBMS_CLOSE(l_bfile); --關閉l_bfile文件。 commit; END; / ***************************************************** oracle中插入一個blob數(shù)據(jù) (來自Google) create or replace directory utllobdir as 'c:\xxx'; --你的BLOB文件所在位置。 create table bfile_tab (bfile_column BFILE); create table t (blob_column BLOB); ---------------------------------------- declare a_blob BLOB; a_bfile BFILE := BFILENAME('UTLLOBDIR','BLOB文件名'); begin insert into bfile_tab values (a_bfile) returning bfile_column into a_bfile; insert into t values (empty_blob()) returning blob_column into a_blob; dbms_lob.fileopen(a_bfile); dbms_lob.loadfromfile(a_blob, a_bfile, dbms_lob.getlength(a_bfile)); dbms_lob.fileclose(a_bfile); commit; end; -------------------------------------------------------------------- >clob 用于將大型字符數(shù)據(jù)存儲在數(shù)據(jù)庫中。clob變量中的定位器指向大型字符數(shù)據(jù)的地址。 插入數(shù)據(jù)到clob列與普通字符串類似。 讀取clob數(shù)據(jù) DBMS_LOB.READ(clob類型變量,要讀的字符數(shù),啟始位置(1為最前端),varchar2類型變量) --讀取指定clob到varchar2,從開始位置讀多少。 >nclob 將大型 nchar數(shù)據(jù)存儲在數(shù)據(jù)庫中。nclob數(shù)據(jù)類型同時支持固定寬度字符和可變寬度字符(Unicode字符數(shù)據(jù))。nclob類型的使用方 法與clob類似。 屬性類型 屬性用于引用變量或數(shù)據(jù)庫列的數(shù)據(jù)類型,以及表示表中一行的記錄類型。 { 優(yōu)點: .. 不需要知道被引用的列或表的具體數(shù)據(jù)類型。 .. 如果更改了被引用對象的數(shù)據(jù)庫定義,那么pl/sql在運行時變量的數(shù)據(jù)類型也會隨之更改。 } >%type 引用某個變量或數(shù)據(jù)庫列的數(shù)據(jù)類型來聲名變量。 語法: icode itemfile.itemcode%TYPE; 其中; icode:是變量名稱。 itemfile.itemcode:是表名.列名。 **icode的數(shù)據(jù)類型與itemfile表中itemcode列的數(shù)據(jù)類型相同。 >%ROWTYPE 提供表中一行的記錄類型。 例: emp_rec emp%ROWTYPE; **emp_rec被聲明為emp一行的類型。 <*>邏輯比較 運算符 描述 = 等于 <>,!= 不等于 < 小于 > 大于 <= 小于等于 >= 大于等于 關系運算符用于比較sql和過程語句中的變量和常量,這些表達式稱為布爾表達式。 布爾表達式的結(jié)果為true,false或null,通常有邏輯運算符and,or和not連接,主要用在條件控制語句中。 布爾表達式共有3中類型,即數(shù)字布爾型,字符布爾型和日期布爾型。 <*>控制結(jié)構 pl/sql提供可通過控制結(jié)構來控制命令執(zhí)行的流程。 >條件控制 .. if 條件 then 執(zhí)行語句.... end if; .. if 條件 then 執(zhí)行語句1.... else 執(zhí)行語句2.... end if; .. if 條件 then 執(zhí)行語句1.... elsif 條件 then 執(zhí)行語句2.... end if; .. case 待比較值 when 比較值 then 執(zhí)行語句.... when 比較值 then 執(zhí)行語句.... when 比較值 then 執(zhí)行語句.... [else when 執(zhí)行語句....] end case; >循環(huán)控制 .. loop 執(zhí)行語句.... [EXIT<表示強行跳出循環(huán)<|EXIT then (條件)<條件不為true就跳出>] end loop; .. while 條件 loop 執(zhí)行語句.... end loop; .. for counter in [ reverse] value1..value2 loop 執(zhí)行語句.... end loop; 關鍵字reverse在for循環(huán)中屬于可選項。只有在需要對值從大到小執(zhí)行循環(huán)時,才會使用reverse關鍵字。 >順序控制 >goto語句 無條件地將控制權轉(zhuǎn)到標簽指定的語句。 語法: goto 標簽名 標簽定義方法:<<標簽名>> >null語句 什么都不做,只是將控制權轉(zhuǎn)到下一個語句。 <*>動態(tài)sql Oracle中的動態(tài)sql可以通過本地動態(tài)sql命令執(zhí)行,也可以通過DBMS_SQL程序包來執(zhí)行。 語法: execute immediate 動態(tài)sql語句字符串 [into select語句選擇的記錄值<參數(shù)類型>] [using 綁定輸入?yún)?shù)變量<參數(shù)值>] <*>錯誤處理 >預定義異常 pl/sql支持的預定義異常: 異常 說明 ACCESS_INTO_NULL 在未初始化對象時出現(xiàn) CASE_NOTE_FOUND 在case語句中的選項與用戶輸入的數(shù)據(jù)不匹配是出現(xiàn) COLLECTION_IS_NULL 在給尚未初始化的表或數(shù)組賦值時出現(xiàn) CURSOR_ALREADY_OPEN 在用戶試圖打開已經(jīng)打開的游標是出現(xiàn),在重先打開游標前必須先將其關閉 DUP_VAL_ON_INDEX 在用戶試圖將重復的值存儲在使用唯一索引的數(shù)據(jù)庫列中時出現(xiàn)。 INVALID_CURSOR 在執(zhí)行非法的游標運算是出現(xiàn)。 INVALIE_NUMBER 在將字符串轉(zhuǎn)換為數(shù)字時出現(xiàn)。 LOGIN_DENIED 在輸入用戶名或密碼無效時出現(xiàn) NO_DA STORAGE_ERROR 在內(nèi)存損壞或pl/sql耗盡內(nèi)存時出現(xiàn)。 TOO_MANY_ROWS 在執(zhí)行select into語句后返回多行時出現(xiàn)。 VALUE_ERROR 在產(chǎn)生大小限制錯誤時出現(xiàn)。 ZERO_DIVIDE 以零做除數(shù)時出現(xiàn)。 使用異常的語法: exception 異常名稱 then 執(zhí)行異常處理語句.... >用戶自定義異常 語法: 聲明: 自定義異常名稱 EXCEPTION; 使用raise語句顯示引發(fā):raise 自定義異常名稱 處理: exception 自定義異常名稱 then 執(zhí)行異常處理語句.... >引發(fā)應用程序錯誤 過程RAISE_APPLICATION_ERROR用于創(chuàng)建用戶定義的錯誤信息。 語法: RAISE_APPLICATION_ERROR(error_number,error_message) 其中: error_number:指定的異常編號,必須在-20000和-20999之間的負整數(shù)。 error_message:異常指定的消息文本。長度可答2048字節(jié),錯誤消息是與error_number表示關聯(lián)的文本。 十一.游標管理 游標是構建在pl/sql中,用來查詢數(shù)據(jù),獲取記錄集合的指針。 <*>靜態(tài)游標 靜態(tài)游標是在編譯時知道其select語句的游標。 >隱式游標 Oracle預定義了一個sql的隱式游標,通過檢查隱式游標的屬性可以獲取與最近執(zhí)行的sql語句相關的信息。 隱式游標的屬性: .. %found:在dml語句影響一行或多行時,%found屬性在返回true。 .. %notfound:與%found的作用正好相反,如果沒有影響任何行,則返回true。 .. %rowcount:返回dml語句影響的行數(shù),如果沒有影響行則返回0。 .. %isopen:返回游標是否已經(jīng)打開的值。在執(zhí)行sql語句之后,Oracle自動關閉sql游標,所以隱式游標的%isopen屬性始終為false。 >顯示游標 顯示游標是由用戶顯示聲明的游標。根據(jù)在游標中定義的查詢,查詢返回的行集合可以包含零行或多行,這些行稱為活動集。游標將指向活動集中的當前行。 顯示游標的標準操作過程: 1.聲明游標 2.打開游標 3.從游標中獲取記錄 4.關閉游標 顯示游標在declare部分的聲明語法: cursor cursor_name [(parameter[,parameter..])] [return return_type] is select_statement; 其中: cursor_name:是游標的名稱。 parameter:用于為游標指定輸入?yún)?shù)。 return_type:定義游標提取的行的類型。 select_statement:指定游標的查詢語句。 在聲明游標后可以用下列語句控制游標: open:打開游標。 fetch: 從游標中提取行。 close: 關閉游標。 顯示游標同樣有隱式游標的屬性并起相同。 使用顯示游標刪除或更改: 如果處理過程中需要刪除或更新行,在定義游標時必須使用select...for update語句,而在執(zhí)行delete或update時使用where current of 字句指定游標的當前行。 **提示:select語句必須只包括一個表,而且delete和update語句只有在打開游標并提取特定行之后才能使用 |
|