您好,登錄后才能下訂單哦!
PL sql中cursor用法是非常廣泛的,常常用于存儲過程和函數的返回值,其中用于函數的返回值變相的解決了pl sql 沒有表值函數的問題,一般的,在java 調用存儲過程,所返回的結果集也是用游標去存儲的。
游標分為動態游標和靜態游標
1,動態游標定義分兩種方式一種是先定義自定義類型如 Type my_cursor is ref cursor .這樣就可以定義了一個游標類型,然后我們自己的變量就可以用這個自定義類型去定義了,如 cursorDemo my_cursor (直接用系統自帶的sys_refcursor也是可以的);另外上面的my_cursor 又可以分為強類型和弱類型,顧名思義,強類型是指在定義的時候指定只能放哪些類型的值,如上面強類型定義Type my_cursor is ref cursor return emp%rowtype. 游標之所以稱之為動態是因為可以放不同的值或者不同表的值(限于弱類型,強類型的動態是指相同類型不同表的值),如 open cursorDemo for
select 1 from dual;也可以 open cursorDemo for select a ,b from dual;
2,靜態游標就比較簡單了,定義的時候直接指定值就好了如 cursor my_cursor is select 1 from dual;
游標的使用。
1,在java中游標是用類型oracleTypes.CURSOR 調用然后返回結果,部分代碼參考如下
CallableStatement cs = ct.prepareCall("{call findset_emp(?,?)}");
cs.setInt(1, 10);
cs.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR);
cs.execute();
ResultSet rs = (ResultSet)cs.getObject(2);
while(rs.next()){
System.out.println(rs.getInt(1)+" "+rs.getString(2));
}
2,在存儲過程或者函數中可以使用for 循環和fetch去調用
for循環的格式是如下
emp my_cursor%rowtype
for emp in my_cursor loop dbms_output.put_line(emp.a);
end loop;
fetch 用法格式如下
loop
fetch my_cursor into emp;
exit when emp%notfound;
dbms_output.put_line(emp.a);
end loop;
兩者對比for循環應該是更簡單一些,當然還有其他用法,這里就不一一介紹,基本這兩種就夠用了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。