在java中游标的用法

一.只有输入参数没有返回结果的存储过程二.有输入和有一个返回值的存储过程三、返回多行记录的存储过程(返回的是游标)四、Hibernate调用oracle存储过程一.只有输入参数没有返回结果的存储过程建表createtabletable_1(idvarchar2(10),namevarchar2(10));--没有返回值的存储过程createorreplaceprocedureprc_1(t_idinvarchar2,t_nameinvarchar2)asbegininsertintotable_1values(t_id,t_name);endprc_1;1.在sqlplus中执行SQL>execprc_1('1','杨2');PL/SQLproceduresuccessfullycompleted2.在java中执行,返回结果Class.forName("oracle.jdbc.OracleDriver").newInstance();Stringurl="jdbc:oracle:thin:atf_ygj/mas123@192.168.6.19:1531:orcl";Stringuser="atf_ygj";Stringpassword="mas123";conn=DriverManager.getConnection(url,user,password);conn.setAutoCommit(false);cstmt=conn.prepareCall("{callprc_1(?,?)}");cstmt.setString(1,"100");cstmt.setString(2,"TestOne");cstmt.execute();conn.commit();========================================二.有输入和有一个返回值的存储过程--有一个返回值的存储过程createorreplaceprocedureprc_2(t_idINVARCHAR2,t_nameOUTVARCHAR2)ASbeginSELECTnameINTOt_nameFROMtable_1WHEREid=t_idandrownum<2;endprc_2;1.在sqlplus中执行,返回结果SQL>varnamevarchar2(100);SQL>execprc_2('1',:name);PL/SQLproceduresuccessfullycompletedname---------杨22.在java中执行,返回结果Class.forName("oracle.jdbc.OracleDriver").newInstance();Stringurl="jdbc:oracle:thin:atf_ygj/mas123@192.168.6.19:1531:orcl";Stringuser="atf_ygj";Stringpassword="mas123";conn=DriverManager.getConnection(url,user,password);conn.setAutoCommit(false);cstmt=conn.prepareCall("{callprc_2(?,?)}");cstmt.setString(1,"1");cstmt.registerOutParameter(2,Types.VARCHAR);cstmt.execute();conn.commit();StringtestPrint=cstmt.getString(2);System.out.println("返回值::::::"+testPrint);输出:返回值::::::杨2三、返回多行记录的存储过程(返回的是游标)由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分,1,建一个程序包。createorreplacepackagetest_packageastypetest_CURSORisrefcursor;endtest_package;2,建立存储过程,存储过程为:createorreplaceprocedureprc_3(p_CURSORouttest_package.test_CURSOR)isbeginOPENp_CURSORFORSELECT*FROMtable_1orderbyid;endprc_3;可以看到,它是把游标(可以理解为一个指针),作为一个out参数来返回值的。===========================3.在java中的执行Class.forName("oracle.jdbc.OracleDriver").newInstance();Stringurl="jdbc:oracle:thin:atf_ygj/mas123@192.168.6.19:1531:orcl";Stringuser="atf_ygj";Stringpassword="mas123";conn=DriverManager.getConnection(url,user,password);cstmt=conn.prepareCall("{callprc_3(?)}");cstmt.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);cstmt.execute();rs=(ResultSet)cstmt.getObject(1);while(rs.next()){System.out.println(""+rs.getString(1)+""+rs.getString(2)+"");}输出结果:1杨2100TestOne100杨1100TestOne200Test24.在sqlplus中执行用一个存储过程调用prc_3createorreplaceprocedureprc_4isctest_package.test_CURSOR;idvarchar2(100);namevarchar2(100);beginprc_3(c);LOOPFETCHcINTOid,name;EXITWHENc%NOTFOUND;DBMS_OUTPUT.PUT_LINE('=='||id||'==='||name);ENDLOOP;CLOSEc;endprc_4;执行SQL>setserveroutputon;SQL>execdbms_output.enable(999999999999999999999);PL/SQLproceduresuccessfullycompletedSQL>execprc_4;==1===杨2==100===TestOne==100===杨1==100===TestOne==200===Test2PL/SQLproceduresuccessfullycompleted四、Hibernate调用oracle存储过程privatevoidprc_test(){getHibernateTemplate().execute(newHibernateCallback(){publicObjectdoInHibernate(Sessionsession)throwsHibernateException,SQLException{CallableStatementcstmt=session.connection().prepareCall("{callprc_3(?)}");cstmt.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);cstmt.execute();ResultSetrs=(ResultSet)cstmt.getObject(1);while(rs.next()){System.out.println(""+rs.getString(1)+""+rs.getString(2)+"");}returnnull;}},true);}

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

文秘专家
机构认证
内容提供者

1

确认删除?