答:分類:
1:隱式遊標:用戶沒有顯式聲明的遊標。根本看不到關鍵詞光標。
2.顯示光標:用戶通過cursor關鍵字顯式聲明的光標。
3:參考光標:
b:什麽是隱式光標?
1:什麽時候產生的:
將在任何合法SQL語句的執行中生成。它不壹定存儲數據。它還可以存儲受記錄集影響的行數。
如果執行SELECT語句,此時遊標將存儲數據。如果執行INSERT、UPDATE和DELETE語句,將存儲受記錄影響的行數。
c:隱式光標叫什麽名字?
名稱是sql
關於sql的遊標變量有哪些?
函數:返回與最後壹條SQL語句相關的遊標信息。因為執行每個SQL語句,所以會生成壹個隱式遊標。那麽當前執行的SQL語句就是當前的隱式遊標。
找到sql %
sql %未找到
sql%rowcount
sql%isopen
d:隱式遊標的示例:
創建學生基本信息表
(
StuID號(2)、
StuName varchar2(20)
)
變更表學生基本信息表添加約束PK _ Stuid主鍵(Stuid)
聲明
num num:= 0;
開始
數量:=#
從StuID=num的學生基本信息表中刪除;
如果sql%notfound,則
Dbms_output.put_line('此行未找到數據');
其他
Dbms_output.put_line('找到並刪除了數據,受影響的行數為' | | SQL % rowcount);
結束if;
結束;
e:顯示光標的示例:
1:如何定義顯示光標
聲明遊標& ltcursor _ name & gt是[select語句];
聲明遊標mycur是select empno,ename,job from scott.emp
2.如何打開光標:
打開& ltcursor _ name & gt;
打開mycur
3.如何通過遊標讀取數據
獲取& ltcursor _ name & gtinto & lt變量列表& gt
4.如何關閉光標:
關閉& ltcursor _ name & gt;
關閉mycur
註意:在Oracle中,不需要顯示銷毀光標。因為在甲骨文,很多東西都是JAVA寫的。Oracle將自動銷毀該遊標。
5.例如:
聲明
光標mycur是select empno,ename,job from emp-創建壹個光標
vempno emp.empno % type
vename emp.ename % type
vjob emp.job % type
開始
打開mycur-打開光標
將mycur提取到vempno,vename,vjob-使用數據
dbms_output.put_line('我找到妳了!'| | | mycur % rowcount | | ' line ');
Dbms_output.put_line('讀取的數據是' | | Vempno | | ' | | | Vename | | ' | Vjob);
關閉mycur
結束;
因為只讀出了壹個,所以我們必須遍歷它:
聲明
光標mycur是select empno,ename,job from emp
vempno emp.empno % type
vename emp.ename % type
vjob emp.job % type
開始
打開mycur
循環-循環,遍歷
將mycur提取到vempno,vename,vjob
當mycur % notfound時退出;
如果找到mycur %,則
Dbms_output.put_line('讀取的數據是' | | Vempno | | ' | | | Vename | | ' | Vjob);
結束if;
結束循環;
dbms_output.put_line('我找到妳了!'| | | mycur % rowcount | | ' line ');
關閉mycur
結束;
6.通常,當我們讀取表數據時,我們需要動態地查詢它。那麽可以給Oracle中的遊標參數嗎?當然可以!
1):如何用參數定義壹個遊標;
聲明遊標& ltcursor _ name & gt(參數名稱參數類型描述)是從BBB中選擇xxxxx其中AAA = =和CCC =;
2):舉例:
遊標是壹個集合,讀取數據有兩種方式。
第壹種方法:打開獲取關閉
第二種方式:壹旦使用了for循環,相當於在循環開始時執行open,相當於處理循環時執行fetch,相當於退出循環時執行close。
聲明遊標查詢(vname varchar)是select empno,ename,job from EMP where ename like ' % ' | | vname | | ' % ';
三種類型的光標示例:
-
聲明
遊標TEST_CUR為
SELECT * FROM EMP
MY _ CUR EMP % ROWTYPE
開始
打開TEST _ CUR
將TEST_CUR提取到MY_CUR中;
雖然找到了TEST _ CUR %
環
DBMS_OUTPUTPUT_LINE(MY_CUR。EMPNO|| ',' ||MY_CUR。ENAME);
將TEST_CUR提取到MY_CUR中;
結束循環;
關閉TEST _ CUR
結束;
-
聲明
遊標TEST_CUR為
SELECT * FROM EMP
開始
對於測試中的MY_CUR
環
DBMS_OUTPUTPUT_LINE(MY_CUR。EMPNO|| ',' ||MY_CUR。ENAME);
結束循環;
結束;
-
聲明
遊標TEST_CUR(V_SAL號)是
選擇*
來自電磁脈沖
其中SAL & gtV _ SAL
V_SAL1號;
開始
v _ sal 1:= 2000;
對於我的當前測試(V_SAL1)
環
DBMS_OUTPUTPUT_LINE(MY_CUR。EMPNO|| ',' ||MY_CUR。ENAME);
結束循環;
結束;