oracle is ref cursor java_oracle cursor 用法总结
PL?sql中cursor用法是非常廣泛的,常常用于存儲(chǔ)過程和函數(shù)的返回值,其中用于函數(shù)的返回值變相的解決了pl?sql?沒有表值函數(shù)的問題,一般的,在java?調(diào)用存儲(chǔ)過程,所返回的結(jié)果集也是用游標(biāo)去存儲(chǔ)的。
游標(biāo)分為動(dòng)態(tài)游標(biāo)和靜態(tài)游標(biāo)
1,動(dòng)態(tài)游標(biāo)定義分兩種方式一種是先定義自定義類型如?Type?my_cursor?is ref cursor .這樣就可以定義了一個(gè)游標(biāo)類型,然后我們自己的變量就可以用這個(gè)自定義類型去定義了,如 cursorDemo my_cursor?(直接用系統(tǒng)自帶的sys_refcursor也是可以的);另外上面的my_cursor?又可以分為強(qiáng)類型和弱類型,顧名思義,強(qiáng)類型是指在定義的時(shí)候指定只能放哪些類型的值,如上面強(qiáng)類型定義Type?my_cursor is ref cursor return emp%rowtype.?游標(biāo)之所以稱之為動(dòng)態(tài)是因?yàn)榭梢苑挪煌闹祷蛘卟煌淼闹?限于弱類型,強(qiáng)類型的動(dòng)態(tài)是指相同類型不同表的值),如?open cursorDemo for
select 1 from dual;也可以 open cursorDemo for select a ,b from dual;
2,靜態(tài)游標(biāo)就比較簡單了,定義的時(shí)候直接指定值就好了如?cursor?my_cursor is select 1 from dual;
游標(biāo)的使用。
1,在java中游標(biāo)是用類型oracleTypes.CURSOR?調(diào)用然后返回結(jié)果,部分代碼參考如下
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,在存儲(chǔ)過程或者函數(shù)中可以使用for??循環(huán)和fetch去調(diào)用
for循環(huán)的格式是如下
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循環(huán)應(yīng)該是更簡單一些,當(dāng)然還有其他用法,這里就不一一介紹,基本這兩種就夠用了。
總結(jié)
以上是生活随笔為你收集整理的oracle is ref cursor java_oracle cursor 用法总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php设计之初用于什么,PHP设计模式(
- 下一篇: uniapp动态修改样式_掌握Photo