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
select * from pact_test
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;
(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;