程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracle游標、臨時表使用練習

oracle游標、臨時表使用練習

編輯:Oracle教程

oracle游標、臨時表使用練習


1.創建一張會話級的臨時表:

 

create global temporary table pact_test
(
   pact_id varchar2(100),
   pact_code varchar2(100),
   pact_name varchar2(800)
) on commit preserve rows;


 

2.創建一張主表,並插入數據:

 

create table PACT_BASEINFO
(
  pact_id           VARCHAR2(30) not null,
  pact_code         VARCHAR2(150) not null,
  pact_name         VARCHAR2(1000) not null 
)


 

插入數據:

 

prompt Importing table pact_test...
set feedback off
set define off
insert into pact_test (PACT_ID, PACT_CODE, PACT_NAME)
values ('2014', 'ZD0ZB', '天翼電信');

insert into pact_test (PACT_ID, PACT_CODE, PACT_NAME)
values ('2014', 'HISGS', '海南電信');

insert into pact_test (PACT_ID, PACT_CODE, PACT_NAME)
values ('2014', 'JSSGS', '江蘇電信');

insert into pact_test (PACT_ID, PACT_CODE, PACT_NAME)
values ('2014', 'CU12-', '中國聯通甘肅業務');

insert into pact_test (PACT_ID, PACT_CODE, PACT_NAME)
values ('2014', 'YNSGS', '中國電信雲南公司');

prompt Done.


 

3.寫一個游標查詢並插入

 

declare
  v_cnt number :=5;
  cursor c_pact is select pact_id,pact_code,pact_name  from (select rownum rn,pact_id,pact_code,pact_name from pact_baseinfo) a where a.rn 

4.驗證臨時表中是否被插入數據:

 

 

select * from pact_test

5.總結:

 

1)臨時表分為兩種:

會話級別的臨時表:這個臨時表中的數據和你的當前會話有關系,當你當前SESSION 不退出的情況下,臨時表中的數據就還存在,而當你退出當前SESSION 的時候,臨時表中的數據就全部沒有了

事務級別的臨時表:當進行事務提交或者事務回滾的時候,臨時表中的數據將自行被截斷,其他的內容和會話級的臨時表的一致(包括退出SESSION 的時候,事務級的臨時表也會被自動截斷)

這次實驗用的是會話級別的臨時表,下面記錄下事務級別的臨時表怎麼建立:

 

create global temporary table pact_test
(
   pact_id varchar2(100),
   pact_code varchar2(100),
   pact_name varchar2(800)
) on commit delete rows;

2)游標的使用:

 

(1)Oracle中的游標分為顯式游標和隱式游標:
顯式游標:用cursor...is 命令定義的游標,它可以對select語句返回的多條記錄進行處理。
隱式游標:在執行insert、delete、update和返回單條記錄的查詢select into語句時由pl/sql自動定義,隱式游標也叫sql游標。


(2)Oracle顯式游標分為普通游標、參數游標、游標變量。
其中普通游標和參數游標也被稱為靜態游標,游標變量被稱為動態游標。


一般所說的游標是指顯式游標,因為隱式並不能被操作者控制,只能獲取他的屬性,本篇先講述最常用的顯式游標,隱式游標在最後簡述。


(3)顯式游標的一般使用步驟
定義游標:cursor cursor_name is select_sql; (注意,游標的定義只能用使關鍵字IS,它與AS不通用)
打開游標:open cursor_name;
提取數據:
語法1 fetch cursor_name into variable1[,variable2,...];
其中,fetch into 每次只能提取一行數據,批量數據需使用循環;variable指定接收游標數據的變量,select_sql的字段有幾個,就有幾個variable。
語法2 fetch cursor_name bulk collect into collect1,collect2,...[limit rows];
其中,collect指定接收游標結果的集合變量,這種語法9i後支持,比較耗內存。


顯示游標(游標的四個屬性):
%isopen:檢測游標是否已經打開,已經打開則返回true。
%found:檢測游標結果集是否存在數據,存在返回true。如果打開游標後沒有使用fetch推進,則返回null.
%notfound:檢測游標結果集是否不存在數據,不存在返回true。
%rowcount:返回到當前行為止已提取的實際行數。

關閉游標:close cursor_name;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved