溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

oracle cursor 用法總結

發布時間:2020-07-30 15:15:23 來源:網絡 閱讀:1315 作者:簡杰生 欄目:關系型數據庫

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循環應該是更簡單一些,當然還有其他用法,這里就不一一介紹,基本這兩種就夠用了。















向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女