`
king_tt
  • 浏览: 2108891 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java调用 Oracle存储过程(或函数) 返回游标、动态数组与

 
阅读更多
1:如何从 PL/SQL 存储函数返回数组


在数据库中创建一个 SQLVARRAY 类型,在本例中,它是 VARCHAR2 类型。 作为 scott/tiger 用户连接到数据库,并在 SQL 提示符处执行以下命令。


Sql代码 收藏代码
  1. CREATEORREPLACETYPEEMPARRAYisVARRAY(20)OFVARCHAR2(30)



然后创建下面的函数,它返回一个 VARRAY。


Sql代码 收藏代码
  1. CREATEORREPLACEFUNCTIONgetEmpArrayRETURNEMPARRAYASl_dataEmpArray:=EmpArray();CURSORc_empISSELECTenameFROMEMP;BEGINFORemp_recINc_empLOOPl_data.extend;l_data(l_data.count):=emp_rec.ename;ENDLOOP;RETURNl_data;END;



在数据库中创建函数后,可以从 java 应用程序调用它并在应用程序中获得数组数据。


Java代码 收藏代码
  1. publicstaticvoidmain(){//...
  2. OracleCallableStatementstmt=(OracleCallableStatement)conn.prepareCall("begin?:=getEMpArray;end;");
  3. //Thenameweusebelow,EMPARRAY,hastomatchthenameofthetypedefinedinthePL/SQLStoredFunction
  4. stmt.registerOutParameter(1,OracleTypes.ARRAY,"EMPARRAY");
  5. stmt.executeUpdate();//GettheARRAYobjectandprintthemetadataassosiatedwithit
  6. ARRAYsimpleArray=stmt.getARRAY(1);
  7. System.out.println("thetypeofthearrayis"+simpleArray.getSQLTypeName());
  8. System.out.println("thetypecodeoftheelementinthearrayis"+simpleArray.getBaseType());
  9. System.out.println("thelengthofthearrayis"+simpleArray.length());//Printthecontentsofthearray
  10. String[]values=(String[])simpleArray.getArray();
  11. for(inti=0;i<values.length;i++)
  12. System.out.println("row"+i+"='"+values[i]+"'");//...
  13. }



在上面的代码段中,可以看到 OracleCallableSatatement 用于调用 PL/SQL 存储函数。在执行 PL/SQL 存储函数前,将返回的数据类型注册为 OracleTypes.ARRAY,并且指定在数据库中定义的类型名称 (EMPARRAY)。然后执行 PL/SQL 存储函数并获得 oracle.sql.ARRAY 形式的返回值。 oracle.sql.ARRAY 类拥有的方法可以获得关于数组的详细信息,如数组类型、数组长度等。使用 oracle.sql.ARRAY 的 getArray() 方法获得数组的内容并将内容打印出来。

2.函数怎样返回游标,以及如何调用




Java代码 收藏代码
  1. packageDemo;
  2. importjava.io.*;
  3. //ImportingtheOracleJdbcdriverpackagemakesthecodemorereadable
  4. importoracle.jdbc.*;
  5. importjava.sql.*;
  6. classOracleRef
  7. {
  8. publicstaticvoidmain(Stringargs[])
  9. throwsSQLException
  10. {
  11. //Loadthedriver
  12. DriverManager.registerDriver(neworacle.jdbc.OracleDriver());
  13. Stringurl="jdbc:oracle:thin:@localhost:1521:yangyang";
  14. try{
  15. Stringurl1=System.getProperty("JDBC_URL");
  16. if(url1!=null)
  17. url=url1;
  18. }catch(Exceptione){
  19. //Ifthereisanysecurityexception,ignoreit
  20. //andusethedefault
  21. }
  22. //Connecttothedatabase
  23. Connectionconn=
  24. DriverManager.getConnection(url,"scott","tiger");
  25. //Createthestoredprocedure
  26. init(conn);
  27. //PrepareaPL/SQLcall
  28. CallableStatementcall=
  29. conn.prepareCall("{?=calljava_refcursor.job_listing(?)}");
  30. //FindoutalltheSALESperson
  31. call.registerOutParameter(1,OracleTypes.CURSOR);
  32. call.setString(2,"SALESMAN");
  33. call.execute();
  34. ResultSetrset=(ResultSet)call.getObject(1);
  35. //Dumpthecursor
  36. while(rset.next())
  37. System.out.println(rset.getString("ENAME"));
  38. //Closealltheresources
  39. rset.close();
  40. call.close();
  41. conn.close();
  42. }
  43. //Utilityfunctiontocreatethestoredprocedure
  44. staticvoidinit(Connectionconn)
  45. throwsSQLException
  46. {
  47. Statementstmt=conn.createStatement();
  48. stmt.execute("createorreplacepackagejava_refcursoras"+
  49. "typemyrctypeisrefcursorreturnEMP%ROWTYPE;"+
  50. "functionjob_listing(jvarchar2)returnmyrctype;"+
  51. "endjava_refcursor;");
  52. stmt.execute("createorreplacepackagebodyjava_refcursoras"+
  53. "functionjob_listing(jvarchar2)returnmyrctypeis"+
  54. "rcmyrctype;"+
  55. "begin"+
  56. "openrcforselect*fromempwherejob=j;"+
  57. "returnrc;"+
  58. "end;"+
  59. "endjava_refcursor;");
  60. stmt.close();
  61. }
  62. }


分享到:
评论

相关推荐

    详解Hibernate呼叫Oracle的存贮过程和函数

    本示例演示Hibernate 3.2呼叫Oracle的存贮过程和函数,以及通过Hibernate的Query接口简化JDBC的开发步骤--两个步骤得到List集合。使用这种方式开发可以要求开发人员不需要太了解Hibernate框架,但是需要开发人员非常...

    Oracle游标视图和自定义函数

    学习 游标 视图 自定义函数不二选择,我觉得看完之后学到东西了

    Oracle数据库存储过程技术文档.doc

    第一章 oracle存储过程概述 2 1.1 存储过程基本结构(PROCEDURE) 3 1.1.1创建存储过程 3 1.1.2 存储过程删除 5 1.1.3 调用存储过程 5 1.2存储函数(FUNCTIONE) 6 1.2.1 创建存储函数 6 1.2.2 删除存储函数 7 1.3 包...

    groovy将JDBC中oracle存储过程游标转换为多层json

    入参是字符串格式的xml,目的是解析xml节点值,作为数据库检索where条件,检索出数据库记录,利用四个游标返回四个数据集,然后用groovy脚本将四个游标数据集解析成json出参中对应的四个节点值。出参json有两层结构...

    oracle数据库游标实验报告

    oracle数据库游标实验报告!oracle数据库游标实验报告!oracle数据库游标实验报告!

    ibatis调用oracle的函数,存储过程的方法 IN 和OUT /游标

    NULL 博文链接:https://fengtiejun.iteye.com/blog/1603851

    Oracle存储过程及调用

    Oracle存储过程语法 Oracle的存储过程语法如下: create procedure 存储过程名称(随便取) is 在这里可以定义常量、变量、游标、复杂数据类型这里可以定义变量、常量 begin 执行部分 end; (2)带参数的存储...

    oracle常用命令-一完整的电子商务网案例

    电子商务网站案例下载:(数据库脚本,java调用示例,.net(c#)调用示例 说明:一个电子商务网站的oracle数据库完整设计,包括: ...Oracle常用命令14(.net / java代码调用(sql代码、程序包过程))

    Oracle--biancheng.rar_oracle_oracle cursors _sage _存储过程

    设有学生表student(学号sno, 姓名sname, 年龄 sage,系别dept)、课程表Course(课程号cno,课程名称cname)和选课表sc(学号sno,课程号cno,成绩grade),用Oracle ...(4)调用pkg_student程序包中相应的函数或存储过程

    ORACLE_PlSql-甲骨文学习笔记

    №3调用包中的过程和函数 20 №4获取有关包中的函数和过程的信息 21 №5删除包 21 10触发器 21 №1触发器运行的时机 21 №2设置示例触发器的准备工作 22 №3创建触发器 22 №4激活触发器 23 №5获取有关触发器的信息...

    21天学通Oracle

    8.3.3 调用程序包中的函数/存储过程 157 8.3.4 程序包中的变量 158 8.4 本章实例 159 8.5 本章小结 161 8.6 习题 161 …… 第9章 游标(教学视频:36分钟) 162 第10章 触发器(教学视频:58分钟) 178 第11...

    Oracle_plsql基本语法笔记.txt

    标题 存储过程及函数 procedure 的建立和调用 function的建立和调用 标题 参数的调用(in 模式为按址调用,out / in out模式为按值调用。NOCOPY 强行转换成按址调用)。 标题 软件包及封装 软件包(PACKAGE...

    Oracle11g从入门到精通2

    《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的数据库管理(如安装与启动,用户权限、备份与恢复等)...

    oracle 转mysql项目总结

    (主要分事务处理,游标处理,存储过程方法调用,数组处理,异常处理等。) (2)oracle与mysql区别比较。 (主要包含:语法及结构区别,函数区别,数据类型区别等。) (3)ORACLE与MYSQL常用函数对比。

    精通SQL 结构化查询语言详解

    15.5.2 Oracle中存储过程和函数的管理 第16章 SQL触发器  16.1 触发器的基本概念  16.1.1 触发器简介  16.1.2 触发器执行环境 16.2 SQL Server中的触发器  16.2.1 SQL Server触发器的种类  16.2.2 ...

    Oracle11g从入门到精通

    《Oracle11g从入门到精通》面向数据库管理人员和数据库开发人员,从实际角度出发,系统地介绍了数据库和Oracle的相关概念和原理、Oracle的数据库管理(如安装与启动,用户权限、备份与恢复等)...

    pl/sql入门教程

    plsql入门 游标变量 Oracle EXTRACT()函数 用Java调用存储过程 ORACLE用户常用数据字典的查询使用方法

Global site tag (gtag.js) - Google Analytics