基于Oracle的存储过程

    技术2022-05-20  46

    存储过程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();   }  } }


    最新回复(0)