a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

詳解ORACLE中游標(biāo)的生命周期

2019-11-02 15:52:45
字體:
供稿:網(wǎng)友

 在網(wǎng)絡(luò)或者書籍中,我們可以非常容易的了解到ORACLE中游標(biāo)的生命周期包括如下部分:

1,打開游標(biāo)-- open cursor,此步驟在 UGA 里申請一塊內(nèi)存給游標(biāo)使用,這個(gè)時(shí)候游標(biāo)還沒有與sql語句關(guān)聯(lián)。
2,解析游標(biāo)-- sql與游標(biāo)關(guān)聯(lián)起來,解析sql的內(nèi)容(包括執(zhí)行計(jì)劃),解析后的內(nèi)容會(huì)被加載到共享池中(share pool-- library cache)。在UGA申請的內(nèi)存用來保存指向這個(gè)共享游標(biāo)(share cursor)在library cache中的位置。
3,定義輸出變量-- 如果sql語句返回?cái)?shù)據(jù),必須先定義接收數(shù)據(jù)的變量。這一點(diǎn)不僅對查詢語句很重要,對于使用returning 自居的delete、insert和update 語句也很重要。
4,綁定輸入變量-- 如果sql語句使用了綁定變量,必須提供他們的值。綁定的過程是不做什么檢查。如果指定了無效的數(shù)據(jù),執(zhí)行的過程中會(huì)爆出一個(gè)運(yùn)行時(shí)錯(cuò)誤。
5,執(zhí)行游標(biāo)-- 執(zhí)行跟游標(biāo)關(guān)聯(lián)的sql。注意 數(shù)據(jù)庫并非總是在這一步做重要的事情。事實(shí)上,對于很多類型的查詢語句來說,真正的處理過程通常會(huì)被推遲到fetch數(shù)據(jù)階段。
6,獲取游標(biāo)-- 如果sql語句返回?cái)?shù)據(jù),這一步會(huì)接受這些數(shù)據(jù)。特別是在查詢語句中,大部分的處理工作都是在這一步進(jìn)行的。在查詢語句中,可能只會(huì)讀取部分記錄,換句話講,游標(biāo)有可能在取到所有記錄前被關(guān)閉。
7,關(guān)閉游標(biāo)-- 釋放UGA中與這個(gè)游標(biāo)有關(guān)的資源,從而這些資源可供其他的游標(biāo)使用。在library cache中的share cursor不會(huì)被清除,它會(huì)繼續(xù)保留在library cache 中,等待被重用(軟解析重用)。

重復(fù)的內(nèi)容,我們不做過多介紹,今天我們來看一下游標(biāo)生命周期中各個(gè)部分所扮演的角色,以及如何利用它們來優(yōu)化我們的程序。

借鑒《oracle性能診斷藝術(shù)》中的代碼片段,我們來研究一下游標(biāo)的生命周期;

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 create or replace procedure cursor_test as   l_ename  emp.ename%TYPE := 'SCOTT';   l_empno  dbms_sql.Number_Table;   l_cursor INTEGER;   l_retval INTEGER;   cnt integer := 1;   indx integer := 1;   res varchar2(4000); BEGIN   for i in 1 .. 1000 loop     l_cursor := DBMS_SQL.open_cursor;     DBMS_SQL.parse(l_cursor,                    'select empno from emp where ename <> :ename and 0 <> '||i , DBMS_SQL.native);     l_empno.delete();     DBMS_SQL.define_array(l_cursor, 1, l_empno,cnt,indx);     DBMS_SQL.bind_variable(l_cursor, ':ename', to_char(i));     l_retval := DBMS_SQL.execute(l_cursor);       while DBMS_SQL.fetch_rows(l_cursor) > 0 loop       dbms_sql.column_value(l_cursor, 1, l_empno);     end loop;     res :='';     for j in 1 .. l_empno.count() loop         res := res || L_EMPNO(j);      end loop;      DBMS_OUTPUT.PUT_LINE(res);     dbms_sql.close_cursor(l_cursor);   end loop; end; 
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久精品综合 | 精品国产一区二区三区国产馆杂枝 | 日日爱视频 | 亚洲狠狠久久综合一区77777 | 欧美日韩视频在线第一区 | 国产精品毛片一区二区在线看 | 国产一区二区三区在线免费观看 | 国产一区二区免费 | 成人国产免费视频 | 一级片国产 | 成人欧美一区二区三区在线湿哒哒 | 龙珠z普通话国语版在线观看 | 最新日韩在线 | 久久久久久国产精品免费免费 | 国产二区精品 | 啪啪毛片| 国产精品一区二区av | 韩国三级中文字幕hd久久精品 | 色吊丝2288sds中文字幕 | 中文字幕日韩专区 | 免费av片| 亚洲福利 | 国产精品影院在线观看 | 综合网视频 | 国产精品久久久久婷婷 | 狠狠干狠狠干 | 亚洲天天干 | 中国黄色一级毛片 | 日韩日韩日韩日韩日韩日韩日韩 | 久久99精品久久久久久秒播放器 | 日韩精品一区二区三区视频播放 | 欧洲成人在线视频 | 成人亚洲免费 | 青青青免费在线视频 | 久久精品国产精品亚洲 | 欧美日韩国产在线观看 | 国产成a | 国产精品自产拍在线观看桃花 | 在线日韩| 久久精品综合 | 精品国产免费久久久久久尖叫 |