oracle游標 臨時表使用練習

2021-07-02 14:45:27 字數 2934 閱讀 3588

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;

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.建立一...

游標和臨時表

臨時表和游標的使用小總結 最近使用db的機會比較多,現做了一些小總結 i。臨時表 臨時表與永久表相似,但臨時表儲存在 tempdb 中,當不再使用時會自動刪除。臨時表有區域性和全域性兩種型別 2者比較 區域性臨時表的名稱以符號 打頭 僅對當前的使用者連線是可見的 當使用者例項斷開連線時被自動刪除 全...

oracle之儲存過程,臨時表,游標示例

總結如下 ddl是一種消耗資源非常大的操作,執行時盡量不要使用ddl語句,應用程式需要的臨時表應在執行之前就開始建立。不必在每個儲存過程中建立一次。臨時表總是存在的,他們作為物件存在於資料字典中,並且總是保持為空,直到有會話在其中放入資料 1 建立臨時表 sql create global temp...