游標(cursor)能夠根據查詢條件從資料表中提取一組記錄,將其作為乙個臨時表置於資料緩衝區中,利用指標逐行對記錄資料進行操作。
如下是查詢oracle scott下的emp表中empno為7788的姓名和工資。
declare
cursor cur_emp(p_empno number) is
select e.ename, e.sal from scott.emp e where emp.empno = p_empno; --宣告游標
v_empno emp.empno%type := 7788;
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
open cur_emp(v_empno); --開啟游標
--迴圈取出
loop --loop迴圈
fetch cur_emp
into v_ename, v_sal; --提取記錄
exit when cur_emp%notfound;--退出迴圈
dbms_output.put_line(v_ename || '的工資是' || v_sal);
end loop;
close cur_emp; --關閉游標
end;
如下是查詢oracle scott下的emp表中empno為7788的姓名和工資。
declare
cursor cur_emp is
select e.ename, e.sal from scott.emp e where e.empno=7788 ; --宣告游標
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
open cur_emp; --開啟游標
--迴圈取出
loop
fetch cur_emp
into v_ename, v_sal; --提取記錄
exit when cur_emp%notfound;
dbms_output.put_line(v_ename || '的工資是' || v_sal);
end loop;
close cur_emp; --關閉游標
end;
以上輸出結果相同,如下:
游標實際上是一種能從包括多條資料記錄的結果集中每次提取一條記錄的機制。游標充當指標的作用。儘管游標能遍歷結果中的所有行,但他一次只指向一行。
概括來講,sql的游標是一種臨時的資料庫物件,即可以用來存放在資料庫表中的資料行副本,也可以指向儲存在資料庫中的資料行的指標。游標提供了在逐行的基礎上操作表中資料的方法。
游標的乙個常見用途就是儲存查詢結果,以便以後使用。游標的結果集是由select語句產生,如果處理過程需要重複使用乙個記錄集,那麼建立一次游標而重複使用若干次,比重複查詢資料庫要快的多。
大部分程式資料設計語言都能使用游標來檢索sql資料庫中的資料,在程式中嵌入游標和在程式中嵌入sql語句相同
因為我們做的資料量大,而且系統上跑的不只我們乙個業務。所以,我們都要求盡量避免使用游標,游標使用時會對行加鎖,可能會影響其他業務的正常進行。而且,資料量大時其效率也較低效。另外,記憶體也是其中乙個限制。
因為游標其實是相當於把磁碟資料整體放入了記憶體中,如果游標資料量大則會造成記憶體不足,記憶體不足帶來的影響大家都知道了。
所以,在資料量小時才使用游標
Oracle之游標 使用(續)
上節回顧 1 游標 隱式游標 select into from where dml命令 屬性 sql isopen 假的 關閉的 sql found sql notfound sql rowcount 受影響行數 顯式游標 select from where 可以返回多行記錄 宣告游標 開啟游標 提...
雙重游標的使用以及動態游標的使用
今天天有個 讓我寫這樣乙個過程給他 個人表資訊表結構 家庭編碼 個人名字 個人編號 312344 劉海源 312344 孔祥玉 312345 梁永勝 312345 高少芝 說明 4 條個人資訊中 由 家庭編碼相同的為乙個家庭 上面是有2個家庭 每個家庭有2個人 比如 劉海源 和 孔祥玉 有相同的家庭...
oracle 儲存過程之游標(loop)使用
declare 宣告兩個變數 v id varchar2 50 v int number cursor yb is select a.id from t d5 punishment a where a.removed 0 begin v int 1 變數賦值 open yb 開啟游標 loop 開始...