精华内容
下载资源
问答
  • DB2 存储过程返回结果集
    千次阅读
    2018-05-14 21:26:21

    存储过程返回结果集,但是并未明确定义out参数的情况下,要正确获取到结果集,则必须明确设置返回结果集个数:
    result set 结果集个数
    如果没有声明返回结果集个数,那么存储过程中定义的游标是获取不到其值的
    1:创建存储过程
    create procedure proName(in tabName varchar(20))
    	result set 1
    	language sql
    p1:begin
    	declare v_code integer default -1;
    	declare v_rows integer default -1;
    	begin
    		declare c1 cursor with return for values(v_code,v_rows);
    		open c1;
    	end;
    end p1

    2:使用jdbc链接数据库,通过java代码调用上述存储过程
    String callPro="{call proName(?)}";
    CallableStatement call=conn.prepareCall(callPro);
    call.setString(1,"tabName");
    boolean flag=call.execute();
    ResultSet rst=call.getResultSet();
    while(rst.next()){
    	String str1=rst.getString(1);
    	......
    	}
    system.out.println(str1)

    更多相关内容
  • 利用函数返回结果集

    千次阅读 2021-01-19 07:03:32
    利用函数返回结果集方法总结返回结果集函数可以将变量值传递给函数得到指定的结果集,优点在于灵活控制结果集变量及输出,不用将sql嵌入到页面代码里,业务逻辑如有更改可以直接在数据库中维护。现总结三种方法:...

    利用函数返回结果集方法总结

    返回结果集函数可以将变量值传递给函数得到指定的结果集,优点在于灵活控制结果集变量及输出,不用将sql嵌入到页面代码里,业务逻辑如有更改可以直接在数据库中维护。

    现总结三种方法:OBJECT TYPE、OBJECT TYPE+PIPE ROW、RECORD+PIPE ROW

    OBJECT TYPE

    TYPE定义

    createtypetp_obj_emp asobject(

    empno NUMBER(4),

    ename VARCHAR2(10),

    job VARCHAR2(9),

    mgr NUMBER(4),

    hiredate DATE,

    sal NUMBER(7,2),

    comm NUMBER(7,2),

    deptno NUMBER(2)

    )

    createtypetp_tab_emp istableoftp_obj_emp;

    函数定义

    createorreplacefunctionf_test_record(p_deptno number)returntp_tab_emp as

    v_tab tp_tab_emp;

    begin

    selecttp_obj_emp(empno,ename,job,mgr,hiredate,sal,comm,deptno)

    bulkcollect

    intov_tab

    fromemp

    wheredeptno =p_deptno;

    returnv_tab;

    end;

    调用

    SQL> select * from table(f_test_record(10));

    EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

    ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------

    7782 CLARK MANAGER 7839 09-6月 -81 2450 10

    7839 KING PRESIDENT 17-11月-81 5000 10

    7934 MILLER CLERK 7782 23-1月 -82 1300 10

    已用时间: 00: 00: 00.01

    OBJECT TYPE+PIPE ROW

    TYPE定义

    createtypetp_obj_emp asobject(

    empno NUMBER(4),

    ename VARCHAR2(10),

    job VARCHAR2(9),

    mgr NUMBER(4),

    hiredate DATE,

    sal NUMBER(7,2),

    comm NUMBER(7,2),

    deptno NUMBER(2)

    )

    createtypetp_tab_emp istableoftp_obj_emp;

    函数定义

    createorreplacefunctionf_test_record_pipe(p_deptno number)

    returntp_tab_emp

    pipelinedas

    v_obj tp_obj_emp;

    begin

    forcur in(select*fromemp wheredeptno =p_deptno)loop

    v_obj :=tp_obj_emp(cur.empno,

    cur.ename,

    cur.job,

    cur.mgr,

    cur.hiredate,

    cur.sal,

    cur.comm,

    cur.deptno);

    piperow(v_obj);

    endloop;

    end;

    调用

    SQL> select * from table(f_test_record_pipe(10));

    EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

    ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------

    7782 CLARK MANAGER 7839 09-6月 -81 2450 10

    7839 KING PRESIDENT 17-11月-81 5000 10

    7934 MILLER CLERK 7782 23-1月 -82 1300 10

    已用时间: 00: 00: 00.01

    RECORD+PIPE ROW

    定义包

    createorreplacepackagepkg_pipe_test as

    typet_rec_emp isrecord(

    empno number(4),

    ename varchar2(10),

    job varchar2(9),

    mgr number(4),

    hiredate date,

    sal number(7,2),

    comm number(7,2),

    deptno number(2));

    typet_tab_emp istableoft_rec_emp;

    functionf_test_record_pipe_noc(p_deptno number)returnt_tab_emp

    pipelined;

    end;

    createorreplacepackagebodypkg_pipe_test is

    functionf_test_record_pipe_noc(p_deptno number)returnt_tab_emp

    pipelinedas

    v_rec t_rec_emp;

    begin

    forcur in(select*fromemp wheredeptno =p_deptno)loop

    v_rec.empno :=cur.empno;

    v_rec.ename :=cur.ename;

    v_rec.job :=cur.job;

    v_rec.mgr :=cur.mgr;

    v_rec.hiredate :=cur.hiredate;

    v_rec.sal :=cur.sal;

    v_rec.comm :=cur.comm;

    v_rec.deptno :=cur.deptno;

    piperow(v_rec);

    endloop;

    end;

    end;

    调用

    SQL> select * from table(pkg_pipe_test.f_test_record_pipe_noc(10));

    EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

    ---------- ---------- --------- ---------- -------------- ---------- ---------- ----------

    7782 CLARK MANAGER 7839 09-6月 -81 2450 10

    7839 KING PRESIDENT 17-11月-81 5000 10

    7934 MILLER CLERK 7782 23-1月 -82 1300 10

    已用时间: 00: 00: 00.01

    总结

    对于OBJECT TYPE和OBJECT TYPE+PIPE ROW的方法需要在数据库里定义OBJECT TYPE而RECORD+PIPE ROW需要在包内定义RECORD类型。

    展开全文
  • Java 统一返回结果集封装

    千次阅读 2019-11-27 11:44:34
    Java 统一返回结果集封装封装实体类调用 封装实体类 /** * 统一返回结果集实体类 * @param <T> 返回数据对象 */ @Data public class ErrorMsg<T> { //错误码 private Integer errorCode; //错误...

    Java 统一返回结果集封装

    封装实体类

    /**
     * 统一返回结果集实体类
     * @param <T> 返回数据对象
     */
    @Data
    public class ErrorMsg<T> {
    
        //错误码
        private Integer errorCode;
    
        //错误信息,一般为前端提示信息
        private String errorMsg;
    
        //返回值,一般为成功后返回的数据
        private T data;
    
        //错误详情,一般为失败后的详细原因,如空指针之类的
        private String errorDetail;
    
        public ErrorMsg() {}
    
        public ErrorMsg(Integer errorCode, String errorMsg) {
            this.errorCode = errorCode;
            this.errorMsg = errorMsg;
        }
    
        public ErrorMsg(Integer errorCode, String errorMsg, T data) {
            this.errorCode = errorCode;
            this.errorMsg = errorMsg;
            this.data = data;
        }
    
        /**
         * 配合静态对象直接设置 data 参数
         * @param data
         * @return
         */
        public ErrorMsg setNewData(T data) {
            ErrorMsg error = new ErrorMsg();
            error.setErrorCode(this.errorCode);
            error.setErrorMsg(this.errorMsg);
            error.setErrorDetail(this.errorDetail);
            error.setData(data);
            return error;
        }
    
        /**
         * 配合静态对象直接设置 errorMsg 参数
         * @param errorMsg
         * @return
         */
        public ErrorMsg setNewErrorMsg(String errorMsg) {
            ErrorMsg error = new ErrorMsg();
            error.setErrorCode(this.errorCode);
            error.setErrorMsg(errorMsg);
            error.setErrorDetail(this.errorDetail);
            error.setData(this.data);
            return error;
        }
    
        public static final ErrorMsg SUCCESS = new ErrorMsg(200, "成功");
    
        public static final ErrorMsg INSERT_SUCCESS = new ErrorMsg(200, "新增成功");
    
        public static final ErrorMsg UPDATE_SUCCESS = new ErrorMsg(200, "更新成功");
    
        public static final ErrorMsg DELETE_SUCCESS = new ErrorMsg(200, "删除成功");
    
        public static final ErrorMsg UPLOAD_SUCCESS = new ErrorMsg(200, "上传成功");
    
        public static final ErrorMsg DOWNLOAD_SUCCESS = new ErrorMsg(200, "下载成功");
    
        public static final ErrorMsg LOGIN_SUCCESS = new ErrorMsg(200, "登陆成功");
    
        public static final ErrorMsg LOGOUT_SUCCESS = new ErrorMsg(200, "登出成功");
    
        public static final ErrorMsg LOGIN_ERROR = new ErrorMsg(201, "登陆错误");
    
        public static final ErrorMsg LOGIN_EXPIRE = new ErrorMsg(202, "登陆过期");
    
        public static final ErrorMsg ACCESS_LIMITED = new ErrorMsg(301, "访问受限");
    
        public static final ErrorMsg ARGS_ERROR = new ErrorMsg(501, "参数错误");
    
        public static final ErrorMsg UNKOWN_ERROR = new ErrorMsg(502, "系统异常");
    
        public static final ErrorMsg INSERT_ERROR = new ErrorMsg(503, "新增错误");
    
        public static final ErrorMsg UPDATE_ERROR = new ErrorMsg(504, "更新错误");
    
        public static final ErrorMsg DELETE_ERROR = new ErrorMsg(506, "删除错误");
    
        public static final ErrorMsg UPLOAD_ERROR = new ErrorMsg(507, "上传错误");
    
        public static final ErrorMsg DOWNLOAD_ERROR = new ErrorMsg(508, "下载错误");
    
        public static final ErrorMsg OTHER_SYSTEM_ERROR = new ErrorMsg(509, "调用系统异常");
    }
    

    调用

    成功返回

    return ErrorMsg.SUCCESS;
    

    成功带参返回

    return ErrorMsg.SUCCESS.setNewData(list);
    

    错误返回并设定自定义错误信息

    return ErrorMsg.LOGIN_ERROR.setNewErrorMsg("用户名或密码不正确");
    
    展开全文
  • JAVA调用ORACLE的存储过程、函数的返回结果集 2017年05月11日 21:03:18 彖爻之辞 阅读数:1091 标签: oracle存储 更多 个人分类: --------1.1 ORACLE 具体过程如下: CREATE TABLE STOCK_PRICES( RIC ...

    JAVA调用ORACLE的存储过程、函数的返回结果集

    2017年05月11日 21:03:18 彖爻之辞 阅读数:1091 标签: oracle存储 更多

    个人分类: --------1.1 ORACLE

    具体过程如下:
    
    CREATE TABLE STOCK_PRICES(
        RIC VARCHAR(6) PRIMARY KEY,
        PRICE NUMBER(7,2),
        UPDATED DATE );
    
    --对表插入数据
    INSERT INTO stock_prices SELECT '1110',1.0,SYSDATE FROM DUAL;
    INSERT INTO stock_prices SELECT '1111',2.0,SYSDATE FROM DUAL;
    INSERT INTO stock_prices SELECT '1112',3.0,SYSDATE FROM DUAL;
    INSERT INTO stock_prices SELECT '1113',4.0,SYSDATE FROM DUAL;
    
    --建立一个返回游标
    CREATE OR REPLACE PACKAGE ZZH_TEST.PKG_PUB_UTILS IS
        --动态游标
        TYPE REFCURSOR IS REF CURSOR;
    END PKG_PUB_UTILS;
    
    --创建一个测试用的存储过程
    CREATE OR REPLACE PROCEDURE ZZH_TEST.P_GET_PRICE(AN_O_RET_CODE         OUT NUMBER,
                                                     AC_O_RET_MSG          OUT VARCHAR2,
                                                     CUR_RET               OUT PKG_PUB_UTILS.REFCURSOR,
                                                     AN_I_PRICE IN NUMBER
                                                     ) IS
    BEGIN
        AN_O_RET_CODE := 0;
        AC_O_RET_MSG  := '操作成功';
    
        OPEN CUR_RET FOR
            SELECT * FROM STOCK_PRICES WHERE PRICE<AN_I_PRICE;
    EXCEPTION
        WHEN OTHERS THEN
            AN_O_RET_CODE := -1;
            AC_O_RET_MSG  := '错误代码:' || SQLCODE || CHR(13) || '错误信息:' || SQLERRM;
    
    END P_GET_PRICE;
    
    --创建一个测试用的函数:
    CREATE OR REPLACE FUNCTION ZZH_TEST.F_GET_PRICE(v_price IN NUMBER)
        RETURN PKG_PUB_UTILS.REFCURSOR
    AS
        stock_cursor PKG_PUB_UTILS.REFCURSOR;
    BEGIN
        OPEN stock_cursor FOR
        SELECT ric,price,updated FROM stock_prices WHERE price < v_price;
    
        RETURN stock_cursor;
    END;
    
    --开发JAVA调用存储过程返回结果集的例子:JDBCoracle10G_INVOKEPROCEDURE 
    --开发JAVA调用函数返回结果集的例子:JDBCoracle10G_INVOKEFUNCTION
    
    --2份JAVA源代码:
    
    -- 开发JAVA调用存储过程返回结果集的例子:JDBCoracle10G_INVOKEPROCEDURE
    
    import java.sql.*;
    import oracle.jdbc.OracleCallableStatement;
    import oracle.jdbc.OracleTypes;
     /* 本例是通过调用oracle的存储过程来返回结果集:
      * oracle 9i、10G 的jdbc由1个jar包组成:classes12.zip
      */
     public class JDBCoracle10G_INVOKEPROCEDURE {
      Connection conn = null;
      Statement statement = null;
      ResultSet rs = null; 
      CallableStatement stmt = null;
    
    
      String driver;
      String url;
      String user;
      String pwd; 
      String sql;
      String  in_price ;  
      public  JDBCoracle10G_INVOKEPROCEDURE()
      {   
       driver = "oracle.jdbc.driver.OracleDriver";;
       url = "jdbc:oracle:thin:@10.168.1.193:1521:orcl"; 
       //oracle 用户
       user = "ZZH_TEST";
       //oracle 密码   
       pwd = "ZZH_TEST";
    
       init();
    
       //mysid:必须为要连接机器的sid名称,否则会包以下错:
       //     java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))
       //参考连接方式:
       //   Class.forName( "oracle.jdbc.driver.OracleDriver" ); 
       //   cn = DriverManager.getConnection( "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );   
    
      }
    
      public void init()
      {
    
       System.out.println("oracle jdbc test");
    
       try{
          Class.forName(driver);
          System.out.println("driver is ok");
    
          conn = DriverManager.getConnection(url,user,pwd);
          System.out.println("conection is ok");
    
          statement = conn.createStatement();
             // conn.setAutoCommit(false);
    
          //输入参数
           in_price="3.0";
    
           //调用函数
           stmt = conn.prepareCall( "call P_GET_PRICE(?,?,?,?)");
           stmt.registerOutParameter(1, java.sql.Types.FLOAT);
           stmt.registerOutParameter(2, java.sql.Types.CHAR);
           stmt.registerOutParameter(3, oracle.jdbc.OracleTypes.CURSOR);
           stmt.setString(4, in_price);
           stmt.executeUpdate();
           int retCode = stmt.getInt(1);
           String retMsg = stmt.getString(2);
           if (retCode == -1) { //如果出错时,返回错误信息
           System.out.println("报错!");
           } else {
           //取的结果集的方式一:
               rs = ((OracleCallableStatement)stmt).getCursor(3);
            //取的结果集的方式二:
                 //  rs = (ResultSet) stmt.getObject(3);
    
            String ric ;
         String price ;
         String updated ;
            //对结果进行输出
         while(rs.next()){
          ric = rs.getString(1);
          price = rs.getString(2);
          updated = rs.getString(3);      
    
          System.out.println("ric:"+ric+";-- price:"+price+"; --"+updated+"; "); 
         }
           }
    
        }
           catch(Exception e)
        {
         e.printStackTrace();
        }
              finally{
               System.out.println("close ");
           }       
      }
    
      public static void main(String args [])//自己替换[]
      {
       new JDBCoracle10G_INVOKEPROCEDURE();
      }
      }
    
    --=======================================================================
    
    --源代码:
    
    --开发JAVA调用函数返回结果集的例子:JDBCoracle10G_INVOKEFUNCTION
    
    import java.sql.*;
    import oracle.jdbc.OracleCallableStatement;
    import oracle.jdbc.OracleTypes;
     /*
     /* 本例是通过调用oracle的函数来返回结果集:
      * oracle 9i、10G 的jdbc由1个jar包组成:classes12.zip  
      */
     public class JDBCoracle10G_INVOKEFUNCTION {
      Connection conn = null;
      Statement statement = null;
      ResultSet rs = null; 
      CallableStatement stmt = null;
    
      String driver;
      String url;
      String user;
      String pwd; 
      String sql;
      String  in_price ;  
      public  JDBCoracle10G_INVOKEFUNCTION()
      {
       driver = "oracle.jdbc.driver.OracleDriver";;
       url = "jdbc:oracle:thin:@10.168.1.193:1521:orcl"; 
       //oracle 用户
       user = "ZZH_TEST";
       //oracle 密码   
       pwd = "ZZH_TEST";
    
       init();
    
       //mysid:必须为要连接机器的sid名称,否则会包以下错:
       //     java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=169870080)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))
       //参考连接方式:
       //   Class.forName( "oracle.jdbc.driver.OracleDriver" ); 
       //   cn = DriverManager.getConnection( "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );   
      }
    
      public void init()
      {
       System.out.println("oracle jdbc test");
    
       try{
          Class.forName(driver);
          System.out.println("driver is ok");
    
          conn = DriverManager.getConnection(url,user,pwd);
          System.out.println("conection is ok");
    
          statement = conn.createStatement();
           //conn.setAutoCommit(false);
    
          //输入参数      
           in_price="5.0";
    
           //调用函数
           stmt = conn.prepareCall("{? = call F_GET_PRICE(?)}");
          // stmt.registerOutParameter(1, java.sql.Types.FLOAT);
          // stmt.registerOutParameter(2, java.sql.Types.CHAR);
           stmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
           stmt.setString(2, in_price);
           stmt.executeUpdate();
           //取的结果集的方式一:
                rs = ((OracleCallableStatement)stmt).getCursor(1);
           //取的结果集的方式二:
              //  rs = (ResultSet) stmt.getObject(1);
             String ric ;
         String price ;
         String updated ;
    
         while(rs.next()){
          ric = rs.getString(1);
          price = rs.getString(2);
          updated = rs.getString(3);                 
             System.out.println("ric:"+ric+";-- price:"+price+"; --"+updated+"; "); 
         }
    
        }
           catch(Exception e)
        {
         e.printStackTrace();
        }
              finally{
               System.out.println("close ");
           }       
      }
    
      public static void main(String args [])//自己替换[]
      {
       new JDBCoracle10G_INVOKEFUNCTION();
      }
      }
    

    https://blog.csdn.net/paul50060049/article/details/71698108

     

     

     

     

     

    oracle调用存储过程和函数返回结果集

    2010年10月21日 13:56:00  阅读数:25787

       在程序开发中,常用到返回结果集的存储过程,这个在mysqlsql server 里比较好处理,直接返回查询结果就可以了,
    但在oracle里面 要 out 出去,就多了一个步骤,对于不熟悉的兄弟们还得出上一头汗:),这里我简单介绍一下,以供参考,
       1  定义包
          oracle 返回的结果集需要自定义一个 CURSOR (游标变量)性质的变量,这个要在包头定义,所以要建立一个包,如下是包头

    Pl/sql代码

    CREATE OR REPLACE PACKAGE PAK_rstest

      IS

        TYPE   retcursor    IS   REF   CURSOR;

       PROCEDURE pro_read

         (

           outcurse  IN OUT retcursor

         );

       END; -- Package spec

     

     

     

     

     

     

     

     

         上面是建立了一个名称为PAK_rstest的包头,里面定义了一个CURSOR 类型,类型名为retcursor ,有了这个定义我们就可以用他来返回结果集了,比如该包里面的 pro_read 过程就是 一个返回结果集的过程,下面是他的包体,

    Pl/sql代码

    CREATE OR REPLACE PACKAGE BODY PAK_rstest IS

       PROCEDURE pro_read

       (

           outcurse  IN OUT retcursor

       )

       IS

       begin

            OPEN outcurse FOR

             select * from tbl_test

                    where rownum<6;

            return;

       end;

     

    END;

     

     

     

     

     

     

     

     

     

     

     

     

     

     

        这样就定义好了一个包,这个包里面有个返回结果集的过程 pro_read
      

     2 在程序里面调用,
         下面就是如果在程序里面调用了,这里用java为例子简单介绍一下,
         假设你现在已经有一个Connection  conn 对象连接上了数据库(如何连接数据库我这里就不详细说了), 
         
    则用下面的代码调用过程,

    Pl/sql代码

     

    if(conn !=null){

        String sqlstr = "{call  PAK_SMS2_ROUTE.MO_ISSUE(?)}";

         CallableStatement cstmt = conn.prepareCall(sqlstr);

         cstmt.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR); //outcurse

         cstmt.executeUpdate();

         ResultSet rs = (ResultSet) cstmt.getObject(1); // 这里吧信息已经读入rs结果集里面,剩下的大家都熟悉了吧

       while (rs.next()) {

            System.out.println(rs.getString("s_date1")); //tbl_test 表里的字段名称或是结果集的列名称

         System.out.println(rs.getString("s_date2"));

          }   

             conn.close();

             conn = null;       

    }

     

     

     

     

     

     

     

     

     

     

     

     

     

      好了到这里就可以看到返回的结果集内容了,是不是比较简单啊,:)

       Oracle 存储过程返回结果集:

    过程返回记录集代码

     

    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;

     

    Java调用oracle函数返回游标处理代码

     

    CallableStatement cstmt = null;

    ResultSet rs = null;

    try {

    String callSql = "{? = call AAAAA(?)}";

    cstmt = conn.prepareCall(callSql);

       

    cstmt.setString(2, "userName");

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

    cstmt.execute();

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

    if (rs != null) {

           System.out.print("usercd");

           System.out.print("userName");               

           System.out.println("EMAIL");

           while (rs.next()) {       

        System.out.print(rs.getString(1)+"   ");

        System.out.print(rs.getString(2)+"   ");               

        System.out.println(rs.getString(3));

           }   

    }

    https://blog.csdn.net/whaosy/article/details/5956460

     

     

     

    展开全文
  • mysql存储过程利用临时表返回结果集

    万次阅读 2019-03-18 22:53:06
    首先要声明的是 1,游标的方法会很慢在...4,返回结果集更好的方法是直接链接多个表返回结果集即可,下面的示例虽然给以得到正确结果, 但代码臃肿,速度异常的慢,可以当个反面教材 5,优化后的存储过程: ...
  • SQL Server 返回结果集的几种方式 2017年12月18日 21:52:24xxc1605629895阅读数 7033更多 分类专栏:sqlserver 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。 ...
  • SQL Server 返回结果集的几种方式

    万次阅读 2017-12-18 21:52:24
    SQL Server 返回结果集的几种方式。1. Table Function 2. Inline Function 3. Procedure
  • resultClasses属性声明这个存储过程返回结果集的类型 parameters属性声明这个存储结构的参数 (如果存储过程返回的是一个临时表,那么resultClasses对应的临时表的字段要与数据库中的字 段匹配,匹配不意味着...
  • java返回结果集封装

    万次阅读 2018-01-11 09:31:07
    1、返回消息统一定义文件CodeMsg.java public class CodeMsg { private int retCode; private String message; // 按照模块定义CodeMsg // 通用异常 public static CodeMsg SUCCESS = new CodeMsg(0,"success...
  • 使用存储过程返回结果集

    万次阅读 2018-12-10 10:30:18
    因业务复杂,SQL较为庞大,后改造为存储过程方式,传参,获取结果集,此处只显示存储过程的结构部分,也是最重要部分 CREATE OR REPLACE PACKAGE PKG_QUALITYCONTROL IS TYPE retcursor IS REF CURSOR; ...
  • feign 返回 IPage 无法返回结果集

    千次阅读 2019-08-23 18:24:00
    通过feign调用,服务提供者返回IPage,客户端无法获取到结果;主要原因就是jackson需要默认构造函数序列化; @PostMapping(value ="/page",consumes = MediaType.APPLICATION_JSON_VALUE) ResponseModel...
  • 返回结果集Result类

    千次阅读 2019-12-23 09:59:43
    返回数据封装结果集Result类 public class Result extends HashMap<String, Object> implements Serializable { private static final long serialVersionUID = 64161316464L; public Result() { this....
  • ORACLE如何返回结果集

    千次阅读 2017-05-27 09:33:00
    Oracle不像SQLServer那样在存储过程中用Select就可以返回结果集,而是通过Out型的参数进行结果集返回的。实际上是利用REF CURSOR 代码如下: --procedure返回记录集: ----------------------声明一个Package----...
  • oracle 存储过程返回结果集

    万次阅读 2018-06-01 10:53:15
    因为以前一直用sql server多,现在一下子用oracle ,工具什么都不熟,局限于sql server的思想 网上搜,和问朋友,跟我讲了一大堆,...只需要定义一个结果集,把东西存到结果集中就结束(这个结果集叫做游标),先...
  • java方法通用返回结果集封装

    千次阅读 2020-03-16 19:58:40
    我们在封装方法的时候,有的时候除了需要返回数据结果集data,有的时候需要返回code(或者status) 或者 msg , 此时可以采取下面两种方式进行封装方法的返回值: 一.返回结果使用HashMap接收 1.方法中的数据封装...
  • PostgreSQL 调用存储过程返回结果集

    千次阅读 2018-05-24 14:35:00
    创建返回结果集类型的存储过程: CREATE OR REPLACE FUNCTION public.f_get_member_info(id integer,productname character) RETURNS SETOF record LANGUAGE 'plpgsql' COST 100 VOLATILE ROWS 1000AS $BODY$...
  • oracle 通过function 函数 返回结果集

    千次阅读 2018-02-28 18:31:46
    创建数据对象,用于保存结果集中的结果。create or replace type room as object ( roomid varchar2(12), roomarea varchar2(12), kogicode varchar2(10), structureid varchar2(12), campusid varchar2(12), ...
  • Oracle中函数/过程返回结果集的几种方式:  以函数return为例,存储过程只需改为out参数即可,在oracle 10g测试通过.  (1) 返回游标:  return的类型为:SYS_REFCURSOR  之后在IS里面定义变量:curr SYS_REFCURSOR...
  • Oracle 函数function之返回结果集

    万次阅读 2017-08-15 13:25:53
    工作中常需要经过一段复杂逻辑处理后,得出的一个结果集。并能够将这个结果集作为一个表看待,去进行关联查询 我一般采用建立函数function的方式来处理。 --创建包,声明function和type CREATE OR REPLACE ...
  • Oracle存储过程返回结果集

    万次阅读 2017-12-15 15:25:19
    Oracle存储过程返回结果集都是以SYS_REFCURSOR的方式返回的,我们一般看不到这个返回的具体内容,今天我们换了一种变通的方式来处理存储过程返回的结果集,让我们在PL/SQL中可以查看Oracle自定义函数返回的结果集。...
  • mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生...
  • 调用存储过程和返回结果集

    千次阅读 2017-05-11 21:06:41
    调用存储过程和返回结果集 1.定义包:Oracle返回的结果集需要定义一个游标变量,要在包定义 --包名为test create or replace package test is -- 定义了游标 和类型,用来返回结果集 type resultCursor is ref ...
  • java基础:使用Map接收返回结果集

    千次阅读 2019-07-08 09:49:03
    Controller层: //主要代码 List<Map> results = service.getAccountInfo(map);...注意:以map方式接收结果集时,返回数据的key(对应表中字段名) 全为大写,这个时候用 as的方式命名驼峰方式。
  • plsql 返回结果集的存储过程

    千次阅读 2016-04-06 23:02:46
    --返回结果集的存储过程  --1.创建一个包,在该包中定义了一个游标类型test_corsor create or replace package testpackage as  type test_cursor is ref cursor; end testpackage; --2.创建存储过程 create or ...
  • 执行存储过程返回结果集因为以前一直用sql server多,现在一下子用oracle ,工具什么都不熟,局限于sql server的思想 网上搜,和问朋友,跟我讲了一大堆,什么loop 啊,decalre啊,package啊,什么命令窗口啊,什么 ...
  • mybatis调用mysql存储过程返回结果集

    万次阅读 2015-07-09 17:44:33
    存储过程中经常需要返回结果集。Mysql中直接用select即可返回结果集。而oracle则需要使用游标来返回结果集。这一点Mysql相对比较方便,如下代码即可实现输出结果集: 存储过程定义: DELIMITER $$ DROP ...
  • 论MyBatis返回结果集_返回实体类还是Map在更多的了解mybatis后发现不单单通过实体类可以直接返回数据,还可以直接返回一个Map结果集(resultType="java.util.Map") ,如果是多条数据则返回一个List&...
  • Oracle的存储过程返回结果集

    千次阅读 2016-04-21 20:17:54
    Oracle存储过程: CREATE OR REPLACE PROCEDURE getcity ( citycode IN VARCHAR2, ref_cursor OUT sys_refcursor /* 这个sys_refcursor类型在SYS.STANDARD包中 */ ) AS BEGIN OPEN ref_cursor FOR ...
  • oracle 存储过程返回 结果集 table形式

    万次阅读 2018-05-23 13:50:23
    --sys_refcursor 和 cursor 优缺点比较优点比较优点一:sys_refcursor,可以在存储过程中作为参数返回一个table格式的结构(我把他认为是table类型,容易理解,其实是一个游标), cursor 只能用在存储过程,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 778,614
精华内容 311,445
关键字:

返回结果集

友情链接: 12154f.rar