精华内容
下载资源
问答
  • 实现了游标的一些使用方法,两种定义与使用的方法,存储过程的定义一使用调用返回结果集存储过程
  • 第一种方法:*过程返回记录:CREATE OR REPLACE PACKAGE pkg_testASTYPE myrctype IS REF CURSOR;PROCEDURE get (p_id NUMBER, p_rc OUT myrctype);END pkg_test;/CREATE OR REPLACE PACKAGE BODY pkg_...

    第一种方法:

    *过程返回记录集:

    CREATE OR REPLACE PACKAGE pkg_test

    AS

    TYPE myrctype IS REF CURSOR;

    PROCEDURE get (p_id NUMBER, p_rc OUT myrctype);

    END pkg_test;

    /

    CREATE OR REPLACE PACKAGE BODY pkg_test

    AS

    PROCEDURE get (p_id NUMBER, p_rc OUT myrctype)

    IS

    sqlstr   VARCHAR2 (500);

    BEGIN

    IF p_id = 0 THEN

    OPEN p_rc FOR

    SELECT ID, NAME, sex, address, postcode, birthday

    FROM student;

    ELSE

    sqlstr :=

    ´select id,name,sex,address,postcode,birthday

    from student where id=:w_id´;

    OPEN p_rc FOR sqlstr USING p_id;

    END IF;

    END get;

    END pkg_test;

    /

    函数返回记录集:

    建立带ref cursor定义的包和包体及函数:

    CREATE OR REPLACE

    package pkg_test as

    /* 定义ref cursor类型

    不加return类型,为弱类型,允许动态sql查询,

    否则为强类型,无法使用动态sql查询;

    */

    type myrctype is ref cursor;

    --函数申明

    function get(intID number) return myrctype;

    end pkg_test;

    /

    CREATE OR REPLACE

    package body pkg_test as

    --函数体

    function get(intID number) return myrctype is

    rc myrctype;  --定义ref cursor变量

    sqlstr varchar2(500);

    begin

    if intID=0 then

    --静态测试,直接用select语句直接返回结果

    open rc for select id,name,sex,address,postcode,birthday from

    student;

    else

    --动态sql赋值,用:w_id来申明该变量从外部获得

    sqlstr := ´select id,name,sex,address,postcode,birthday from

    student where id=:w_id´;

    --动态测试,用sqlstr字符串返回结果,用using关键词传递参数

    open rc for sqlstr using intid;

    end if;

    return rc;

    end get;

    end pkg_test;

    第二种方法:

    在sqlplus中建立如下的内容:

    1,程序包

    SQL> create or replace package types

    as

    type cursorType is ref cursor;

    end;

    程序包已创建。

    2、函数

    SQL> create or replace function sp_ListEmp return types.cursortype

    as

    l_cursor    types.cursorType;

    begin

    open l_cursor for select id, title from cf_news order by id;--表的名字

    return l_cursor;

    end;

    函数已创建。

    3、过程

    SQL> create or replace procedure getemps( p_cursor in out types.cursorType )

    as

    begin

    open p_cursor for select id, title from cf_news order by id;--表的名字

    end;

    过程已创建。

    4、建立一个可执行的java控制台程序

    import java.sql.*;

    import java.io.*;

    import oracle.jdbc.driver.*;

    class GetValues

    {

    public static void main (String args [])

    throws SQLException, ClassNotFoundException

    {

    String driver_class = "oracle.jdbc.driver.OracleDriver";

    String connect_string = "jdbc:oracle:thin:@127.0.0.1:1521:database";

    String query = "begin :1 := sp_listEmp; end;"; //此处调用前面建立的函数!

    Connection conn;

    Class.forName(driver_class);

    conn = DriverManager.getConnection(connect_string, "scott", "tiger");

    CallableStatement cstmt = conn.prepareCall(query);

    cstmt.registerOutParameter(1,OracleTypes.CURSOR);

    cstmt.execute();

    ResultSet rset = (ResultSet)cstmt.getObject(1);

    while (rset.next ())         System.out.println( rset.getString (1) );         cstmt.close();   } }

    展开全文
  • 利用游标返回结果集的的例子(Oracle 存储过程).doc 利用游标返回结果集的的例子(Oracle 存储过程).doc 利用游标返回结果集的的例子(Oracle 存储过程).doc
  • 创建存储过程: create or replace procedure read_stu( t out SYS_REFCURSOR ) is begin open t for select sid,sname from student; end; 使用存储过程: declare t sys_refcursor; s student%rowtype; b...

    示例基于student表:

    创建存储过程:

    create or replace procedure read_stu(
    t out SYS_REFCURSOR
    )
    is
    begin
    open t for select sid,sname from student;
    end;

    使用存储过程:

    declare 
    t sys_refcursor;
    s student%rowtype;
    begin 
    read_stu(t);
    loop
    fetch 
     t into s.sid,s.sname;
     dbms_output.put_line(s.sid||' '||s.sname);
     exit when t%notfound;
     end loop;
     close t;
    end;

    返回结果:

    展开全文
  • Oracle 游标返回结果集

    2021-05-03 01:23:43
    有俩种方法:一种是声明系统游标,一种是声明自定义游标,然后后面操作一样,参数类型为in out 或out(1)声明个人系统游标.(推荐)create or replace p_temp_procedure(cur_arg out sys_refcursor; --方法1)beginopen cur_...

    有俩种方法:

    一种是声明系统游标,一种是声明自定义游标,然后后面操作一样,参数类型为

    in out 或out

    (1)声明个人系统游标.(推荐)

    create or replace p_temp_procedure

    (

    cur_arg out sys_refcursor;     --方法1

    )

    begin

    open cur_arg for select * from tablename;

    end

    调用

    declare

    cur_calling sys_refcursor;

    begin

    p_temp_procedure(cur_calling);  --这样这个游标就有值了

    for rec_next in cur_calling loop

    ....

    end loop;

    end;

    create or replace procedure getList(id in varchar2,mycur out sys_refcursor)

    is

    v_sql varchar2(4000);

    begin

    dbms_output.put_line('call it success');

    v_sql:='select * from userbean s where s.id=:1';

    open mycur for v_sql using id;

    commit;

    end;

    create or replace procedure my_procedure

    (mypageNo number,mypageSize number,myInfo_Cursor out sys_refcursor)

    as

    pageNO number;

    pageSize number;

    begin

    open myInfo_Cursor for

    select * from product

    where pid between 1 + (pageNo - 1) * pageSize and 4 + (pageNo - 1) * pageSize;

    end;

    declare

    my_cursor sys_refcursor;

    begin

    my_procedure(1,2,my_cursor);

    for rec_next in my_cursor loop

    dbms_output.put_line('pid:'||rec_next.pid||'  ptypeid:'||rec_next.ptypeid||'  proname:'||rec_next.proname||'  price:'||rec_next.price||'  pronum:'||rec_next.pronum);

    end loop;

    end;

    posted on 2012-09-06 23:30 abin 阅读(277) 评论(0)  编辑  收藏 所属分类: oracle

    展开全文
  • log.info("调用存储过程:SKY_Get_tsths()获取数据为" + jhSkyZgTkRequest.getPlTkItem().size() + "条.每条记录信息如下:" + sb.toString()); } catch (Exception e) { try { conn.rollback(); } catch ...

    public JhSkyZgTkRequest getTsthsDate() {

    //  Session session = this.getSessionFactory().openSession();

    Connection conn = null;

    JhSkyZgTkRequest jhSkyZgTkRequest = new JhSkyZgTkRequest();

    ResultSet rs = null;

    CallableStatement st = null;

    PlTkItem plTkItem = null;

    try {

    conn = newOracleConn.getOracleConn();

    String proc = "{call PKG_RTN_CURSOR.SKY_Get_tsths(?)}";

    st = conn.prepareCall(proc);

    st.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);

    st.execute();

    StringBuffer sb = new StringBuffer();

    rs=(ResultSet)   st.getObject(1);

    while (rs.next()) {

    plTkItem = new PlTkItem();

    plTkItem.setTkpzHm(rs.getString("tkpzHm"));

    plTkItem.setYxtsphm(rs.getString("yxtsphm"));

    plTkItem.setYshm(rs.getString("yshm"));

    String date = rs.getString("kprq");

    date = date.substring(0, 10);

    date = date.replaceAll("-", "");

    plTkItem.setKprq(date);

    plTkItem.setKpje(rs.getDouble("kpje"));

    plTkItem.setZsjgDm(rs.getString("zsjgdm"));

    plTkItem.setZsjgQc(rs.getString("zsjgqc"));

    plTkItem.setTkgkDm(rs.getString("tkgkdm"));

    plTkItem.setTkgkMc(rs.getString("tkgkmc"));

    plTkItem.setSpzlDm(rs.getString("spzldm"));

    plTkItem.setSpzlMc(rs.getString("spzlmc"));

    plTkItem.setNsrsbh(rs.getString("nsrsbh"));

    plTkItem.setNsrmc(rs.getString("nsrmc"));

    plTkItem.setYhzlDm(rs.getString("yhzldm"));

    plTkItem.setSkkhhhh(rs.getString("skkhhhh"));

    plTkItem.setSkkhhMc(rs.getString("skkhhmc"));

    plTkItem.setYskmDm(rs.getString("yskmdm"));

    plTkItem.setYskmMc(rs.getString("yskmmc"));

    plTkItem.setYsfpblDm(rs.getString("ysfpblDm"));

    plTkItem.setYsfpblMc(rs.getString("ysfpblmc"));

    plTkItem.setYszl(rs.getString("yszl"));

    plTkItem.setYsjcDm(rs.getString("ysjcdm"));

    plTkItem.setZlqbz(rs.getString("zlqbz"));

    plTkItem.setFzbz(rs.getString("fzbz"));

    plTkItem.setTbyyDm(rs.getString("tbyydm"));

    plTkItem.setTkyyMc(rs.getString("tkyymc"));

    plTkItem.setTkyj(rs.getString("tkyj"));

    plTkItem.setSpjg(rs.getString("spjg"));

    plTkItem.setPzwh(rs.getString("pzwh"));

    plTkItem.setZzlx(rs.getString("zzlx"));

    plTkItem.setZsxmDm(rs.getString("zsxmdm"));

    plTkItem.setZsxmMc(rs.getString("zsxmmc"));

    plTkItem.setZspmDm(rs.getString("zspmdm"));

    plTkItem.setZspmMc(rs.getString("zspmmc"));

    plTkItem.setTtse(rs.getDouble("ttse"));

    plTkItem.setTkbz(rs.getString("tkbz"));

    plTkItem.setQdDm(rs.getString("qddm"));

    plTkItem.setSkrmc(rs.getString("skrmc"));

    plTkItem.setSkrzh(rs.getString("skrzh"));

    jhSkyZgTkRequest.addPlTkItem(plTkItem);

    sb.append(plTkItem.toString());

    }

    conn.commit();

    log.info("调用存储过程:SKY_Get_tsths()获取数据为"

    + jhSkyZgTkRequest.getPlTkItem().size() + "条.每条记录信息如下:"

    + sb.toString());

    } catch (Exception e) {

    try {

    conn.rollback();

    } catch (SQLException e1) {

    e1.printStackTrace();

    }

    log.error("调用存储过程:SKY_Get_tsths()发生错误,错误信息如下:" + e.getMessage());

    e.printStackTrace();

    } finally {

    try {

    if (st != null)

    st.close();

    if (conn != null)

    conn.close();

    } catch (SQLException e) {

    e.printStackTrace();

    }

    }

    return jhSkyZgTkRequest;

    展开全文
  • 1.新建一个packages,声明返回多个游标结果集CREATE OR REPLACE PACKAGE testxxISTYPE retcursor IS REF CURSOR;TYPE retcursor2 IS REF CURSOR;PROCEDURE pro_read(outcurse OUT retcursor,outcurse2 OUT re...
  • mysql创建存储过程(不使用工具创建) use test; -- test:数据库名。 进入test数据库 DROP PROCEDURE IF EXISTS user; -- synchron_user:存储过程名。 存在synchron_user存储过程,则删除 delimiter // -- mysql语句...
  • -- 将结束标志绑定到游标   DECLARE   CONTINUE   HANDLER  FOR   NOT   FOUND  SET   done =  TRUE ;       -- 打开游标   OPEN   cur_account;    -- 遍历   read_loop: LOOP   -- 取值 取多个...
  • 存储过程是这样的:CREATE OR REPLACE TYPE "ERROR_MESSAGE" AS OBJ...
  • 项目中用到,简单记一下,怕自己忘记了。 Controller: 结果集result server: ...flagCountryDao....结果集返回至: paramsMap.get("cursor") dao层: mybatis的xml文件: <select id="sel...
  • 新建存储过程create or replace procedure getcur(p_rc out sys_refcursor)isbeginopen p_rc for 'select * from room';end getcur;java中调用Class.forName("oracle.jdbc.driver.OracleDriver");Connection conn = ...
  • 有如果典型的java的spring jdbc调用了存储过程返回游标结果集。如果循环调用此方法。则会造成 ORA-01000: 超出打开游标的最大数。原因是没有及时关闭oracle中的游标,但按理说jdbcTemplate模版已经关闭了链接,...
  • SQL code-- 实例:Oracle存储过程返回数据,并将数据插入表CREATE table userinfo(id number(18,0), name varchar2(30), sex varchar2(10), age number(3,0), address varchar2(100));insert into userinfo(id,...
  • 我们如果要在MySQL的存储过程中遍历一个查询语句的结果集,需要使用到游标cursor(SQL server中可以定义表类型的变量Table,但MySQL中不行,只能用游标)。 假设我需要从 tb_stu 这张表中查询出所有记录插入到tb_...
  • 1.创建一个包 ... --定义游标 PROCEDURE TEST_CURSOR(INPUT varchar, CURSOR_BACK OUT CURSOR_TYPE); END PKG_TEST; CREATE OR REPLACE PACKAGE BODY PKG_TEST IS PROCEDURE TEST_CURSOR(INPUT v
  • 存储过程使用游标变量返回结果集

    千次阅读 2013-01-26 23:22:37
    1)登录SQLPLUS,用户为SCOTT,利用该用户提供的表EMP C:\Users\Administrator>...2)编写一个FUNCTION,返回值为游标变量 CREATE OR REPLACE FUNCTION GETEMPCURSOR(PRM_CHOICE IN NUMBER) RETURN SYS_REFCURSOR IS E
  • 典型的应用就是,mapper中调用存储过程,配置一个resultMap,map中写明bean的属性名,和属性类型,以及游标中的字段名, 但是当后台新增或者修改一个字段的名字或者类型时,xml中就必须做相应的变化,很不方便, ...
  • 有俩种方法:一种是声明系统游标,一种是声明自定义游标,然后后面操作一样,参数类型为in out 或outSYS_REFCURSOR 型游标,该游标是Oracle 以预先定义的游标,可作出参数进行传递(1)声明个人系统游标.(推荐)create or ...
  • 我们在处理存储过程中的结果集时,可以使用游标,因为游标允许我们迭代查询返回的一组行,并相应地处理每行。mysql的游标为只读,不可滚动和敏感三种模式,我们来看下: 只读:无法通过光标更新基础表中的数据。 ...
  • 将调用存储过程参数放入map中,由于返回游标中包含很多参数,所以再写一个resultmap与之对应,类型为hashmap。设置返回的jdbcType=CURSOR,resultMap设置为id对应的值。最后游标中的值就输出到list中了。代码如下: ...
  • MySQL 存储过程中,使用游标查询,返回的是结果集时,如何查看调用存储过程输出结果呢?解决方案:存储过程返回数据,但它能创建和填充另一个表。所以在存储过程运行中创建临时表。该临时表将保存存储过程中生成的...
  • MySQL存储过程 游标

    2021-01-18 19:47:05
    MySQL存储过程 游标如何在存储过程中使用MySQL游标来遍历SELECT语句返回结果集MySQL游标简介要处理存储过程中的结果集,请使用游标游标允许您迭代查询返回的一组行,并相应地处理每行。MySQL游标为只读,不可...
  • 直接将存储过程返回结果集插入到表中,即使用insert into 表名 exec 存储过程.此种方式中注意存储过程返回结果集列与insert的列要完全对应,可以在insert中指定列名来保证对应关系.------------...
  • 1、--Oracle 创建包 申明自定义游标类型create or replace package pk_Var is...2、--Oracle 创建存储过程返回数据集合CREATE OR REPLACE PROCEDURE pr_getdata(v_empno VARCHAR2 , RC1 out PK_Var.csr_tp )ASsSQ...
  • 1.原因是insert into 语句里面有个字段是 aa,bb 这中存储的,所以需要拼接字符串.(木有办法啊,淫家数据库是这样设计的) 2.注:DECLARE这种声明的变量包括游标 都必须在存过的最上面,BEGIN 的下面.
  • 1,什么是游标? ①从表中检索出结果集,从中每次指向一条记录进行交互的机制。 ②关系数据库中的操作是在完整的行集合上执行的。 由SELECT 语句返回的行集合包括...由该语句返回完整的行集合叫做结果集。 应...
  • SQL Server技术问题之游标优缺点分类:...(1) Transact_SQL 游标Transact_SQL 游标是由DECLARE CURSOR 语法定义、主要用在Transact_SQL 脚本、存储过程和触发器中。Tr...文章技术小牛人2017-11-15919浏览量SQL Serv...
  • Oracle存储过程可以利用游标返回结果集,它的实现方法是本文我们主要要介绍的内容,接下来我们就开始介绍。首先我们在sqlplus中建立如下的内容: 1、程序包 SQL&gt; create or replace package types 2 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,154
精华内容 17,261
关键字:

存储过程游标返回结果集