基于Oracle的存储过程
发布日期:2021-10-03 03:16:56 浏览次数:16 分类:技术文章

本文共 2486 字,大约阅读时间需要 8 分钟。

存储过程oracle代码:

CREATE OR REPLACE PROCEDURE select_pro(tablename in varchar2,

s_count number,
e_count number,
v_cur out SYS_REFCURSOR)
AS
 v_sql varchar2(1024);
BEGIN
v_sql:='select t.* from (select rownum r,e.* from ( ' || tablename ||' ) e) t where r between ' || s_count || ' and ' || e_count;
OPEN v_cur FOR v_sql;
END;

//函数做分页用java代码实现
package jdbc;
//给test用户下所有的表做分页
import java.sql.*;
import java.util.Scanner;

public class ConnectionOr5 {

 public static CallableStatement cs = null;
 public static ResultSet rs = null;
 public static ResultSetMetaData rsm = null;
 // 没new StringBuffer()对象
 public static StringBuffer sbf = new StringBuffer();
 public static Scanner sc = new Scanner(System.in);

 public static void main(String[] args) {

  try {
   // 调用函数 函数名没有写对

   cs = DriverConnection.driverConnection("test", "test").prepareCall(

     "{? = call FUNTION_SELECT(?,?,?) }");
   // 注册
   cs.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);

   System.out.println("请输入表名:");

   String str = sc.next();
   cs.setString(2, str);
   System.out.println("请输入初始值:");
   int star = sc.nextInt();
   System.out.println("请输入结束值:");
   int end = sc.nextInt();
   cs.setInt(3, star);
   cs.setInt(4, end);
   // 忘记更新
   cs.executeUpdate();
   rs = (ResultSet) cs.getObject(1);
   rsm = rs.getMetaData();
   int count = rsm.getColumnCount();
   for (int i = 1; i <= count; i++) {
    sbf.append(rsm.getColumnName(i)).append("/t").append("/t");
   }
   sbf.append("/n");
   while (rs.next()) {
    for (int i = 1; i <= count; i++) {
     sbf.append(rs.getString(rsm.getColumnName(i))).append("/t")
       .append("/t");
    }
    sbf.append("/n");
   }
   System.out.println(sbf);
  } catch (SQLException e) {
   e.printStackTrace();
  } finally {
   try {
    if (rs != null)
     rs.close();
    if (cs != null)
     cs.close();
   } catch (SQLException e) {
    e.printStackTrace();
   }
  }
 }
}

存储过程做分页

package jdbc;

import java.sql.*;

import oracle.jdbc.driver.OracleTypes;

public class ConnectionOr4 {

 public static CallableStatement call = null;
 public static ResultSet rs = null;
 public static void main(String[] args) {
  try {
   //調用用过程
   call = DriverConnection.driverConnection("test", "test").prepareCall("{call select_pro(?,?,?,?)}");
   call.setString(1, "dept");
   call.setInt(2, 3);
   call.setInt(3, 6);
   //输出参数必须注册
   call.registerOutParameter(4, OracleTypes.CURSOR);
   call.execute();
   rs=(ResultSet) call.getObject(4);
   while(rs.next()){
    int deptno=rs.getInt("deptno");
    String dname=rs.getString("dname");
    String loc=rs.getString("loc");
    System.out.println(deptno+"/t"+dname+"/t"+loc);
   }
  } catch (SQLException e){
   e.printStackTrace();
  }
 }
}

转载地址:https://blog.csdn.net/KANGBROTHER/article/details/6211059 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:jquery-ajax(异步刷新)
下一篇:MYSQL数据类型

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月26日 00时27分39秒