`
yde986
  • 浏览: 98763 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

oracle存储过程(游标作为OUT参数输出)

阅读更多

    包中带过程

    要自己定义一个type [cur_name] is ref cursor游标,返回的时候就直接 procedure AAA(变量名 out [cur_name])如此申明OUT变量
    存储过程 用系统默认的 sys_refcursor 游标类型 定义变量就OK了
1、Sql代码
--PL/SQL Code (包中带过程) 过程带游标的OUT参数,返回游标(ref cursor)  
create or replace package my_pack as 
 type my_ref_cursor is ref cursor;  
 procedure getMyCursor(val out my_ref_cursor);   
end my_pack;  
 
create or replace package body my_pack as 
 procedure getMyCursor(val out my_ref_cursor)  
 is 
 begin 
  open val for select * from student;  
 end;  
end my_pack;  

  

 --PL/SQL Code (包中带过程) 过程带游标的OUT参数,返回游标(ref cursor)
   create or replace package my_pack as
    type my_ref_cursor is ref cursor;
    procedure getMyCursor(val out my_ref_cursor);
   end my_pack;
   
   create or replace package body my_pack as
    procedure getMyCursor(val out my_ref_cursor)
    is
    begin
     open val for select * from student;
    end;
   end my_pack;
 
2、Java代码 
Class.forName("oracle.jdbc.driver.OracleDriver");  
Connection conn = DriverManager.getConnection                       ("jdbc:oracle:thin:@XX.XX.XX.XXX:XXXX:oracle9i","XXX_temp","XXX_temp");   
DriverManager.registerDriver (new oracle.jdbc.OracleDriver());     
CallableStatement cs = conn.prepareCall("{ call my_pack.getMyCursor(?) }");  
cs.registerOutParameter(1,OracleTypes.CURSOR);  
cs.execute();  
ResultSet rs = ((OracleCallableStatement)cs).getCursor(1);  
while(rs.next())  
{  
    System.out.println(rs.getString(1)+"  "+rs.getString(2)+"  "+rs.getString(3)+"  "+ rs.getDate(4)+"  "+rs.getString(5));  

  
   Class.forName("oracle.jdbc.driver.OracleDriver");
   Connection conn = DriverManager.getConnection                       ("jdbc:oracle:thin:@XX.XX.XX.XXX:XXXX:oracle9i","XXX_temp","XXX_temp");
   DriverManager.registerDriver (new oracle.jdbc.OracleDriver());  
   CallableStatement cs = conn.prepareCall("{ call my_pack.getMyCursor(?) }");
   cs.registerOutParameter(1,OracleTypes.CURSOR);
   cs.execute();
   ResultSet rs = ((OracleCallableStatement)cs).getCursor(1);
   while(rs.next())
   {
    System.out.println(rs.getString(1)+"  "+rs.getString(2)+"  "+rs.getString(3)+"  "+ rs.getDate(4)+"  "+rs.getString(5));
   }


3、Sql代码
--PL/SQL Code(存储过程) 带游标的OUT参数,返回游标(ref cursor)  
create or replace procedure retCursor(ret_cursor out sys_refcursor)is 
ret_cursor_value  sys_refcursor;  
begin 
open ret_cursor_value for select * from student;  
 ret_cursor:=ret_cursor_value;  
end retCursor; 

  
--PL/SQL Code(存储过程) 带游标的OUT参数,返回游标(ref cursor)
   create or replace procedure retCursor(ret_cursor out sys_refcursor)is
   ret_cursor_value  sys_refcursor;
   begin
   open ret_cursor_value for select * from student;
    ret_cursor:=ret_cursor_value;
   end retCursor;


4、Java代码
Class.forName("oracle.jdbc.driver.OracleDriver");  
Connection conn = Connection conn = DriverManager.getConnection                       ("jdbc:oracle:thin:@XX.XX.XX.XXX:XXXX:oracle9i","XXX_temp","XXX_temp");   
 
DriverManager.registerDriver (new oracle.jdbc.OracleDriver());     
CallableStatement cs = conn.prepareCall("{ call retCursor(?) }");  
cs.registerOutParameter(1,OracleTypes.CURSOR);  
cs.execute();  
ResultSet rs = ((OracleCallableStatement)cs).getCursor(1);  
while(rs.next())  
{  
    System.out.println(rs.getString(1)+"  "+rs.getString(2)+"  "+rs.getString(3)+"  "+ rs.getDate(4)+"  "+rs.getString(5));  

   Class.forName("oracle.jdbc.driver.OracleDriver");
   Connection conn = Connection conn = DriverManager.getConnection                       ("jdbc:oracle:thin:@XX.XX.XX.XXX:XXXX:oracle9i","XXX_temp","XXX_temp");

   DriverManager.registerDriver (new oracle.jdbc.OracleDriver());  
   CallableStatement cs = conn.prepareCall("{ call retCursor(?) }");
   cs.registerOutParameter(1,OracleTypes.CURSOR);
   cs.execute();
   ResultSet rs = ((OracleCallableStatement)cs).getCursor(1);
   while(rs.next())
   {
    System.out.println(rs.getString(1)+"  "+rs.getString(2)+"  "+rs.getString(3)+"  "+ rs.getDate(4)+"  "+rs.getString(5));
   }


5、下面是个每个学生求平均值的存储过程。遇到的问题是带参数游标中的变量名字不要和表中的一样,否则会出问题

Sql代码
create or replace procedure AAA  
as   
--查询学生表的ID  
cursor s_sno is select s.sno from student s;   
--通过学生ID查询平均成绩  
cursor sc_avg(s_no varchar2) is select avg(sc.degree) from score sc where sc.sno=s_no;   
s_sno_j student.sno%type;   --变量ID  
sc_avg_i score.degree%type; --变量平局成绩  
begin 
 open s_sno;--打开查询ID的游标  
 loop  
   fetch s_sno into s_sno_j;  
   exit when s_sno%notfound;    
     open sc_avg(s_sno_j); --打开查询平均成绩的游标,参数为学生ID  
     loop  
     fetch sc_avg into sc_avg_i;  
     exit when sc_avg%notfound;  
     dbms_output.put_line(sc_avg_i);  
     end loop;  
     close sc_avg;  
 end loop;  
 close s_sno;  
end AAA; 

分享到:
评论

相关推荐

    用callabledStatement调用oracle存储过程实用例子(IN OUT 传游标)

    用callabledStatement调用oracle存储过程实用例子(IN OUT 传参数包括游标类型)

    Oracle存储过程out游标

    内有三个文件 TESTPACKAGE.txt和CURSOR_TEST2.txt中为oracle建存储过程语句,OracleProcedure.java为java操作存储过程的程序

    Oracle存储过程返回游标实例详解

    有俩种方法: 一种是声明系统游标,一种是声明自定义游标,然后后面操作一样,参数类型为 in out 或out (1)声明个人系统游标.(推荐) 代码如下: create or replace p_temp_procedure ( cur_arg out sys_refcursor;...

    oracle 在一个存储过程中调用另一个返回游标的存储过程

    第一种情况是返回的游标是某个具体的表或视图的数据,如: SQL-Code: 代码如下: CREATE OR REPLACE PROCEDURE P_TESTA ( PRESULT OUT SYS_REFCURSOR ) AS BEGIN OPEN PRESULT FOR SELECT * FROM USERS; END P_TESTA;...

    oracle使用dblink高速复制表数据的动态存储过程

    执行存储过程,通过指定目标数据库登录信息,动态生成dblink,打开游标,按批次插入本地指定表中,每批次1万条数据。同步记录和日志信息写在自动生成的sync_log表中。同步完成后自动删除动态生成的存储过程、dblink...

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

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

    21天学通Oracle

    8.2.5 存储过程的参数——IN OUT参数 149 8.2.6 存储过程的参数——参数顺序 149 8.2.7 存储过程的参数——参数的默认值 152 8.2.8 存储过程的参数——参数顺序总结 153 8.3 程序包 153 8.3.1 规范 153 8.3.2 ...

    oracle多个过程例子

    程序包及包主体.sql 存储过程.sql 带inout参数存储过程.sql 带游标的存储过程.sql 函数.sql

    Oracle9i的init.ora参数中文说明

    Oracle9i初始化参数中文说明 Blank_trimming: 说明: 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长, 也允许分配数据。 值范围: TRUE | FALSE 默认值: FALSE serializable: 说明: 确定查询是否获取表级...

    Oracle数据库分页的存储过程

    下面是使用oracle的分页算法的存储过程,拿出来大家参考一下吧。  我认为其中涉及到的包,游标,exception是有点难理解难记忆的,大家可以参考一下相关的书籍好好理解理解~~ //oracle分页存储过程 create or ...

    oracle存储过程常用的技巧(详)

    存储过程的结构是非常的简单的,我们在这里除了学习存储过程的基本结构外,还会学习编写存储过程时相关的一些实用的知识。如:游标的处理,异常的处理,集合的选择等等 1.存储过程结构 1.1 第一个存储过程 create...

    Oracle_plsql基本语法笔记.txt

    标题 参数的调用(in 模式为按址调用,out / in out模式为按值调用。NOCOPY 强行转换成按址调用)。 标题 软件包及封装 软件包(PACKAGE)的建立和调用 软件包的全局结构 封装函数的纯度 标题 查看源代码及...

    oracle实验报告

    2、 定义一个为修改职工表(emp)中某职工工资的存储过程子程序,职工名作为形参,若该职工名在职工表中查找不到,就在屏幕上提示“查无此人”然后结束子程序的执行;否则若工种为MANAGER的,则工资加$1000;工种为...

    Oracle系统调优详解.docx

    Oracle 系统调优是指在 Oracle 数据库系统中,通过调整初始化参数以提高系统性能和稳定性。在 Oracle 8i 及以前的版本中,这些初始化参数记录在 INITsid.ora 文件中;而 Oracle 9i/10g/11g 中将这些参数记录在 ...

    OraclePLSQL编程经典例子

    过程用于执行特定的操作,当执行过程的时候,可以指定输入参数(in),也可以指定输出参数(out)。通过在过程中使用输入参数,可以讲数据输入到执行部分,通过使用输出参数,可以将执行部分的数据输出到应用环境,...

    Oracle 10g 开发与管理

    本文是由笔者2012年学习oracle数据库时编写的学习札记,其中的题目 多数为老师留下的思考题目。 我相信本文会对初学者使用oracle有一个初步的使用印象。右图为我所参 考的书籍。 目录 第一讲 Oacle关系数据库 ...

    PL/SQL Developer8.04官网程序_keygen_汉化

    PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL ...

    PLSQLDeveloper下载

    PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL ...

    xls转mdb代码以及.exe执行软件

    实现数据导入/导出的存储过程 根据不同的参数,可以实现导入/导出整个数据库/单个表 调用示例: --导出调用示例 ----导出单个表 exec file2table 'zj','','','xzkh_sa..地区资料','c:\zj.txt',1 ----导出整个数据库 ...

Global site tag (gtag.js) - Google Analytics