精华内容
下载资源
问答
  • oracle调用存储过程返回游标

    首先你得有张测试表,无论什么表有一两个数据就可以,我本身了解的也不多,所以本文旨在用最简单最明了的方式来介绍Mybaits结合Oracle调用存储过程返回游标结果集,帮助和我一样新入门的同学,高手欢迎指出错误帮助我们成长。

    然后你得了解Oracle游标的概念及作用,你有没有试过在用mybaits想查询很多行数据但对每行的数据做不同的业务处理呢?那么还有一个问题是如果存储过程让你返回一个结果集但存储过程没有java的list又该怎么办?那么我们的游标就闪亮登场了,来一段关于游标的官方解释:游标是 SQL 的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表
    中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据
    处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。
    游标有两种类型:显式游标和隐式游标,在前述程序中用到的 SELECT…INTO…查询
    语句,一次只能从数据库中提取一行数据,对于这种形式的查询和 DML 操作,系统都会
    使用一个隐式游标。但是如果要提取多行数据,就要由程序员定义一个显式游标,并通
    过与游标有关的语句进行处理。显式游标对应一个返回结果为多行多列的 SELECT 语句。
    游标一旦打开,数据就从数据库中传送到游标变量中,然后应用程序再从游标变量
    中分解出需要的数据,并进行处理。

    然后我们就开始建立带游标的存储过程,创建带游标的存储过程有两种方式,一种是声明系统游标,一种是声明自定义游标,然后后面操作一样,参数类型为 in out 或out ,系统游标就是不用定义包头包体,而自定义游标就需要了,当然自定义游标也灵活些,我在网上搜索相关学习资料时,总是看见一些文章对别人的引用丢三落四,定义包头没有包体,自己建系统游标介绍的又不清楚,各种关键字的错误导致我走了一点弯路,就在这里吐个槽吧。
    先来建立系统游标:

    CREATE OR REPLACE Procedure test_speed(p_cursor out Sys_Refcursor)--这就是test_speed的存储过程输出参数为p_cursor的一个游标
    As
    begin
        open p_cursor for Select * From t_test;--将查询到的数据放到游标中
    End;

    再来看自定义游标如何创建:首先定义一个包头:

    CREATE OR REPLACE PACKAGE PAK_TEST
      IS
        TYPE   retcursor    IS   REF   CURSOR;
       PROCEDURE test_speed
         (
           p_cursor  IN OUT retcursor
         );--声明包体的存储过程
       END;

    包体:

    CREATE OR REPLACE PACKAGE BODY PAK_TEST IS
       PROCEDURE test_speed
       (
           p_cursor  IN OUT retcursor 
       )--该存储过程已在包头中声明,我在网上看到有的用       p_cursor  IN OUT PAK_TEST.retcursor的方式来声明,反正我在测试中会报错 
       IS
       begin
            OPEN p_cursor FOR
            select * from t_test;--将查询到的数据放到游标中
       end;
    END;

    –记得重用代码时去掉汉字,游标和存储过程都要end
    好,存储过程已经用两种方式都建立好了,然后用mybaits来调用,我前面写过mybaits的配置及动态成表curd数据库,请参考http://blog.csdn.net/sureSand/article/details/52540684
    只需要在BasicMapper.xml中添加一个select操作,然后模仿insert和update调用test_speed即可:

    <resultMap type ="java.util.HashMap" id= "cursorMap"> 
         <result column ="id" property="id"/>  
         <result column ="name" property="name"/>  
      </resultMap > 
    <select id="test_speed" parameterType="java.util.Map" statementType="CALLABLE" >
            {call PAK_rstest.pro_read (#{p_cursor, mode=OUT, jdbcType=CURSOR, resultMap=cursorMap})}  
        </select>
    展开全文
  • /**调用Oracle存储过程*/public ResultSet queryForAllJSD_NEWEST(final String hpCode, final String id) {System.out.println("hpCode:"+hpCode+",id:"+id);ResultSet rs = (ResultSet)this.jdbctemplate.execute...

    /**

    调用Oracle存储过程

    */

    public ResultSet queryForAllJSD_NEWEST(final String hpCode, final String id) {

    System.out.println("hpCode:"+hpCode+",id:"+id);

    ResultSet rs = (ResultSet)this.jdbctemplate.execute("{call pro_querybcb_newest(? , ? ,?)}" , new CallableStatementCallback(){

    public Object doInCallableStatement(CallableStatement cs)

    throws SQLException, DataAccessException {

    cs.setString(1, hpCode) ;

    cs.setString(2, id) ;

    cs.registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR);

    cs.execute();

    return cs.getObject(3);

    }

    });

    return rs;

    }

    /**

    处理返回结果

    */

    ResultSet rs = dao1.queryForAllJSD_NEWEST(hpCode, id);

    try {

    if (rs.next()) {

    ResultSetMetaData rsmd = rs.getMetaData();

    int i = rsmd.getColumnCount();

    System.out.println("i=" + i);

    for (int j = 1; j <= i; j++) {

    map.put(rsmd.getColumnName(j),rs.getString(j) == null ? "" : rs.getString(j));

    }

    }

    } finally {

    if (rs != null) {

    try {

    rs.close();

    } catch (SQLException e) {

    }

    }

    map.put("name", md.get("A4"));

    map.put("idno", md.get("A7"));

    map.put("Indate", md.get("A16"));

    map.put("outdate", md.get("A17"));

    map.put("hosno", md.get("A15"));

    map.put("sick", md.get("A24"));

    标签:map,调用,rs,get,游标,md,put,Oracle,cs

    来源: https://www.cnblogs.com/fkeyta/p/12129219.html

    展开全文
  • ORACLE存储过程输出游标

    千次阅读 2016-06-01 11:23:29
    ORACLE存储过程输出游标创建存储过程代码块语法遵循标准markdown代码,例如:create or replace procedure test( v1 IN varchar2, v2 IN varchar2, cur OUT sys_refcursor )as ... begin open cur for select t1...

    创建存储过程

    create or replace procedure test(
        v1 IN varchar2,
        v2 IN varchar2,
        cur OUT sys_refcursor
    )as
    ...
    begin
    open cur for
        select t1,t2 from table;
    end;
    
    

    调用存储过程

    最简单的调用就是用test,然后填入输入参数,执行后可以看到游标输出的值。
    或者用SQL调用,打印出来直观的看。

    declare
        cur sys_refcursor;
        v1 varchar2(100);
        v2 varchar2(100);
    begin
    test('111','222',cur);
        loop
            exit when cur%notfound;
            fentch cur into v1,v2;
            DBMS_OUTPUT.put_line('v1:'||v1);
            DBMS_OUTPUT.put_line('v2:'||v2);
        end loop;
        close cur;
    end;
    
    
    展开全文
  • 存储过程】 create or replace procedure Proc_fucking(cur_kkk OUT sys_refcursor) IS BEGIN  open cur_kkk for SELECT * FROM SCOTT.emp; END ; 【"SQL窗体" 调用】 DECLARE   cur_calling ...
    【存储过程】
    
    create or replace procedure Proc_fucking(cur_kkk OUT sys_refcursor) IS
    BEGIN
            open cur_kkk for SELECT * FROM SCOTT.emp;
    END ;




    【"SQL窗体" 调用】
    DECLARE 
       cur_calling SYS_REFCURSOR;
    begin
        proc_fucking(cur_calling);  
        for rec_next in cur_calling LOOP
          DBMS_OUTPUT.put_line(rec_next.ename);
        END LOOP;
    END;




    【报错】
    ORA-06550:第5行,第21列:OLS-00221:'CUR_CALLING'不是过程或尚未定义


    麻烦大侠们帮忙解决一下。
    展开全文
  • --oracle存储过程代码create or replace procedure out_cursor(res out sys_refcursor , in_para in number) is begin open res for select * from c where c.c = in_para; end out_cursor; /   --...
  • 讲有关java如何调用ORACLE存储过程以及游标使用,它只包含JAVA调用ORACLE存储过程游标使用(上),还有JAVA调用ORACLE存储过程游标使用(上),
  • oracle存储过程调用游标例子.pdf
  • java程序连接oracle数据库 连接 在我的服务器上有一个oracle实例是在运行的。 在plsql里可以查看到这个实例有个表叫fenye: 首先下载ojdbc.jar ,提取码:iehb 随便建立一个java项目: 添加JUnit4,把ojdbc包...
  • oracle存储过程调用游标例子

    千次阅读 2017-02-02 12:31:27
    oracle存储过程调用游标例子
  • Oracle存储过程游标 Oracle中的存储过程游标: select myFunc(参数1,参数2..) to dual; --可以执行一些业务逻辑 一:Oracle中的函数与存储过程的区别: A:函数必须有返回值,而过程没有. B:函数可以单独...
  • 注:本文来源于 《 Java调用oracle存储过程通过游标返回临时表数据 》 Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结果集。特别是选择Oracle做为数据库时,...
  • Oracle中的存储过程游标: select myFunc(参数1,参数2..) to dual; --可以执行一些业务逻辑 一:Oracle中的函数与存储过程的区别: A:函数必须有返回值,而过程没有. B:函数可以单独执行.而过程必须通过execute...
  • 1.jdbc连接例子 2.Oracle CLOB转换为String 3.java调用存储过程输出游标
  • 存储过程 CREATE OR REPLACE PROCEDURE proc_test2(p_id IN NUMBER, v_cur OUT SYS_REFCURSOR, p_result_code OUT NUMBER,
  • NULL 博文链接:https://liuzidong.iteye.com/blog/717050
  • java jdbc 调用 oracle存储过程 返回游标  jdbcoracle存储javainsertstring 1.创建测试表 create table users( userid int primary key, username varchar2(20), userpwd varchar2(20) ); ...
  • 一、带游标存储过程  游标作为参数有两种类型:  1、声明系统游标类型SYS_REFCURSOR  1)游标作为存储过程的参数: --带游标存储过程 CREATE OR REPLACE PROCEDURE PRO_EMP_IN(EMP_CUR SYS_REFCURSOR)...
  • I am trying to return a refcursor from a procedure in python using cx_oracle, my procedure looks something like the one below. below the procedure is the python that I am trying to use. when I run the...
  • } 程序中调用OracleParameter[] paramDic = { new OracleParameter("tx_resultlist",OracleType.Cursor), new OracleParameter("insql",OracleType.VarChar), new OracleParameter("currentpage",OracleType.Int...
  • 游标可以当作一个指针,它可以指定结果中的任何位置,然后允许用户对指定位置的数据进行处理 ... DML 语句中只能调用函数,不能调用存储过程 【Java面试题与答案】整理推荐 基础与语法 集合 网...
  • NULL 博文链接:https://fruitking.iteye.com/blog/1447333
  • oracle调用存储过程+游标循环实例

    千次阅读 2014-11-05 16:20:36
    一,有子节点的部门的子节点的排序,调用存储过程 CREATE OR REPLACE PROCEDURE "PRO_INIT_SORT" AS CURSOR cur_department_all IS select * from tbl_department; VAR_COUNT NUMBER ; VAR_OUT_COUNT NUMBER :=...
  • 使用mybatis调用oracle sp的过程如下: step1:首先在对应的配置文件(*mapper.xml)中,定义返回类型值,如下: <mapper namespace="com.sapws.callimpl.shqmxx.dao.WorkerMapper"> <resultMap type=...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,117
精华内容 10,046
关键字:

oracle调用存储过程输出游标