oracle中的游標和函式詳解
1.游標
游標是一種 pl/sql 控制結構;可以對 sql 語句的處理進行顯示控制,便於對錶的行資料
逐條進行處理。 游標並不是乙個資料庫物件,只是存留在記憶體中。
操作步驟:
宣告游標
開啟游標
取出結果,此時的結果取出的是一行資料
關閉游標 到底那種型別可以把一行的資料都裝進來
此時使用 rowtype 型別,此型別表示可以把一行的資料都裝進來。 例如:查詢雇員編號為 7369 的資訊(肯定是一行資訊)。
例:查詢雇員編號www.cppcns.com為 7369 的資訊(肯定是一行資訊)。
declare
eno emp.empno%type ;
empinfo emp%rowtype ;
begin
eno := &en ;
select * into empinfo from emp where empno=eno ;
dbms_output.put_line('雇員編號:'||empinfo.empno) ;
dbms_output.put_line('雇員姓名:'||empinfo.ename) ;
end ;
使用 for 迴圈操作游標(比較常用)
declare
-- 宣告游標
cursor mycur is select * from emp where empno=-1;
empinfo emp%rowtype ;
cou number ;
begin
-- 游標操作使用迴圈,但是在操作之前必須先將游標開啟
for empinfo in mycur
loop
--rowcount 對游標所操作的行數進行記錄
cou := mycur%rowcount ;
dbms_output.put_line(cou||'雇員編號:'||empinfo.empno) ;
dbms_output.put_line(cou||'雇員姓名:'||empinfo.ename) ;
end loop ;
end ;
我們可以看到游標for迴圈確實很好的簡化了游標的開發,我們不在需要open、fetch和close語句,不在需要用%found屬性檢測是否到最後一條記錄,這一切oracle隱式的幫我們完成了。
編寫第乙個游標,輸出全部的資訊。
declare
-- 宣告游標
cursor mycur is select * from emp ; -- 相當於乙個list (emppo)
empinfo emp%rowtype ;
begin
-- 游標操作使用迴圈,但是在操作之前必須先將游標開啟
open mycur ;
-- 使游標向下一行
fetch mycur into empinfo ;
-- 判斷此行是否有資料被發現
while (mycur%found)
loop
dbms_output.put_line('雇員編號:'||empinfo.empno) ;
dbms_output.put_line('雇員姓名:'||empinfo.ename) ;
-- 修改游標,繼續向下
fetch mycur into empinfo ;
end lo程式設計客棧op ;
end ;
也可以使用另外一種方式迴圈游標:loop…end loop;
declare
-- 宣告游標
cursor mycur is select * from emp ;
empinfo emp%rowtype ;
begin
-- 游標操作使用迴圈,但是在操作之前必須先將游標開啟
open mycur ;
loop
-- 使游標向下一行
fetch mycur into empinfo ;
exit when mycur%notfound ;
dbms_output.put_line('雇員編號:'||empinfo.empno) ;
dbms_output.put_line('雇員姓名:'||empinfo.ename) ;
end loop ;
end ;
注意 1: 在開啟游標之前最好先判斷游標是否已經是開啟的。
通過 isopen 判斷
格式:游標%isopen if mycur%isopen then
null ;
else
open mycur ;
end if ;
注意 2:可以使用 rowcount 對游標所操作的行數進行記錄。
declare
-- 宣告游標
cursor mycur is select * from emp ;
empinfo emp%rowtype ;
cou number ; begin
-- 游標操作使用迴圈,但是在操作之前必須先將游標開啟
if mycur%isopen then
null ;
else
open mycur ;
end if ;
loop
-- 使游標向下一行
fetch mycur into empinfo ;
exit when mycur%notfound程式設計客棧 ;
cou := mycur%rowcount ;
dbms_output.put_line(cou||'雇員編號:'||empinfo.empno) ;
dbms_output.put_line(cou||'雇員姓名:'||empinfo.ename) ;
end loop ;
end ;
2.函式
函式就是乙個有返回值的過程。
定義乙個函式:此函式可以根據雇員的編號查詢出雇員的年薪
create or replace fun myfun(eno emp.empno%type)
return number as rsal number ;
begin
select (sal+nvl(comm,0))*12 into rsal from emp where empno=eno ;
return rsal ;
end ;
直接寫 sql 語句,呼叫此函式:
select myfun(7369) from dual ;
寫乙個函式 輸入乙個員工名字,判斷該名字在員工表中是否存在。存在返回 1,不存在返回 0
create or replace function empfun(en emp.ename%type)
return number as is_exist number;
b程式設計客棧egin
select count(*) into is_exist from emp where ename=upper(en);
return is_exist;
end;
本文標題: oracle中的游標和函式詳解
本文位址:
Oracle中的游標和函式
游標是一種 pl sql 控制結構 可以對 sql 語句的處理進行顯示控制,便於對錶的行資料 逐條進行處理。游標並不是乙個資料庫物件,只是存留在記憶體中。操作步驟 宣告游標 開啟游標 取出結果,此時的結果取出的是一行資料 關閉游標 到底那種型別可以把一行的資料都裝進來 此時使用 rowtype 型別...
oracle 游標詳解
游標是對映在結果集中一行資料上的位置實體,有了游標,使用者就可以訪問結果集中的任意一行資料。將游標放置到某行後,即可對該行資料進行操作,例如提取當前行的資料,當前行的某些欄位等。在大多數時候我們在設計程式的時候都遵循下面的步驟 1 開啟游標 2 開始迴圈 3 從游標中取值 4 檢查那一行被返回 5 ...
oracle 游標cursor詳解
一 概念 游標是sql的乙個記憶體工作區,由系統或使用者以變數的形式定義。游標的作用就是用於臨時儲存從資料庫中提取的資料塊。在某些情況下,需要把資料從存放在磁碟的表中調到計算機記憶體中進行處理,最後將處理結果顯示出來或最終寫回資料庫。這樣資料處理的速度才會提高,否則頻繁的磁碟資料交換會降低效率。二 ...