oracle is ref cursor java_oracle cursor 用法总结
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循環應該是更簡單一些,當然還有其他用法,這里就不一一介紹,基本這兩種就夠用了。
總結
以上是生活随笔為你收集整理的oracle is ref cursor java_oracle cursor 用法总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php设计之初用于什么,PHP设计模式(
- 下一篇: uniapp动态修改样式_掌握Photo