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