oracle学习笔记(十八) PL/SQL 游标
生活随笔
收集整理的這篇文章主要介紹了
oracle学习笔记(十八) PL/SQL 游标
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
游標(biāo)
說(shuō)明
查詢結(jié)果的光標(biāo),相當(dāng)于java中的一個(gè)迭代器,方便遍歷操作
可使用的屬性
- %FOUND
SQL語(yǔ)句查詢或影響了一行或多行時(shí)為 TRUE。如:mycursor%FOUND - %NOTFOUND
SQL語(yǔ)句沒(méi)有影響任何行時(shí)為 TRUE。如:mycursor%NOTFOUND - %ROWCOUNT
SQL語(yǔ)句查詢或影響的行數(shù)。如:mycursor%ROWCOUNT - %ISOPEN
檢查游標(biāo)是否打開(kāi),隱式游標(biāo)始終為FALSE。如:mycursor%ISOPEN
隱式游標(biāo)
自動(dòng)聲明,自動(dòng)打開(kāi),自動(dòng)關(guān)閉,名稱為SQL
只能處理單行數(shù)據(jù)
顯式游標(biāo)
遍歷輸出
cursor 游標(biāo)名稱[(參數(shù)列表)] IS select_statement;--使用游標(biāo)遍歷查詢結(jié)果并輸出 declare--給查詢結(jié)果建立一個(gè)游標(biāo)cursor cv_emp is select * from employee;v_emp employee%rowtype; begin--使用for循環(huán),游標(biāo)會(huì)自動(dòng)打開(kāi),移動(dòng)和關(guān)閉for v_emp in cv_emp loop--這里只輸出了員工編號(hào)和員工姓名dbms_output.put_line(v_emp.empno||','||v_emp.ename);end loop; end; /游標(biāo)使用
游標(biāo)開(kāi)始的時(shí)候是處于第一行之前,需要移動(dòng)
--loop循環(huán)使用顯示游標(biāo) --輸出全部員工的信息 declarecursor cv_emp is select empno,ename,job,sal,hiredate from employee;--聲明一個(gè)可存儲(chǔ)游標(biāo)行的變量rec_emp cv_emp%rowtype;i number := 1; beginopen cv_emp;loop--會(huì)使游標(biāo)向下移動(dòng),并將游標(biāo)所指向的數(shù)提取到指定的變量中fetch cv_emp into rec_emp;exit when cv_emp%notfound;--找不到數(shù)據(jù)就退出循環(huán)dbms_output.put_line(i||'. '||rec_emp.empno||', '||rec_emp.ename||', '||rec_emp.job||','||rec_emp.sal||','||rec_emp.hiredate);i := i+1;end loop;close cv_emp;--關(guān)閉游標(biāo) end; /--使用while循環(huán) declare--1. 聲明游標(biāo)cursor cv_emp is select empno,ename,job,sal,hiredate from employee;rec_emp cv_emp%rowtype;i number := 1; beginopen cv_emp;--2.打開(kāi)游標(biāo)fetch cv_emp into rec_emp;--進(jìn)入循環(huán)前就得移動(dòng)游標(biāo)while cv_emp%found loopdbms_output.put_line(i||'. '||rec_emp.empno||', '||rec_emp.ename||', '||rec_emp.job||','||rec_emp.sal||','||rec_emp.hiredate);fetch cv_emp into rec_emp;i := i+1;end loop;close cv_emp;--關(guān)閉游標(biāo) end; /帶參數(shù)游標(biāo)使用
--對(duì)所有的"銷售員"(SALESMAN)增加傭金500. declarecursor cv_emp(v_job employee.job%type) is select * from employee where job = v_job;v_emp employee%rowtype; beginfor v_emp in cv_emp('SALESMAN') loop--使用主鍵約束,更新特定行update employee set sal = sal +500 where empno = v_emp.empno;end loop; commit; end; /游標(biāo)更新數(shù)據(jù)
一般更新操作,需要一個(gè)條件,來(lái)指定需要更新的該條數(shù)據(jù),一般使用主鍵來(lái)指定。
如果不想使用主鍵來(lái)指定,還可以使用游標(biāo)當(dāng)作指定條件,這就是游標(biāo)更新行
REF游標(biāo)
引用游標(biāo),動(dòng)態(tài)游標(biāo)
動(dòng)態(tài)游標(biāo)
轉(zhuǎn)載于:https://www.cnblogs.com/kexing/p/10943878.html
總結(jié)
以上是生活随笔為你收集整理的oracle学习笔记(十八) PL/SQL 游标的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: hadoop2.8 ha 集群搭建
- 下一篇: Centos7安装Python3.6