各位请教:
我想写个存储过程KPG_A(strSQL in varchar, tabtable out table)这个存储过程 通过给出的SQL语句获得 数据,然后 把这个数据集 返回给外面调用的程序 。 这样能做到不哦?
或者,存储过程如何返回一个数据集 给外部
我想写个存储过程KPG_A(strSQL in varchar, tabtable out table)这个存储过程 通过给出的SQL语句获得 数据,然后 把这个数据集 返回给外面调用的程序 。 这样能做到不哦?
或者,存储过程如何返回一个数据集 给外部
CREATE OR REPLACE PROCEDURE emp_max_wage_proc(
o_cur OUT SYS_REFCURSOR
)
IS
BEGIN
open o_cur for
select * from a;
END;
CREATE OR REPLACE PROCEDURE EMP_TEST
(STRSQL IN VARCHAR2, -----SQL语句,至FROM为止
TABTABLE IN VARCHAR2,-----表名
O_CUR OUT SYS_REFCURSOR)---获取结果集
IS
V_SQL VARCHAR2(800);
BEGIN
V_SQL:=STRSQL||TABTABLE;
OPEN O_CUR FOR V_SQL;
END;写了个简单的~~
在MSSQL里面,我直接把SELECT的结果集 直接放DATAGRIDVIEW里面。 可是在ORACLE里面我想 好像有点不一样
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;import oracle.jdbc.OracleTypes;public class TestProcedure { public static void main(String[] args) { try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "test", "test");
CallableStatement cstmt = con.prepareCall("{call testpackage.testproc(?,?)}");
cstmt.setString(1, "7369");
cstmt.registerOutParameter(2, OracleTypes.CURSOR);
cstmt.execute();
ResultSet rs = (ResultSet) cstmt.getObject(2);
if (rs.next()) {
System.out.println(rs.getString(1));
System.out.println(rs.getString(2));
System.out.println(rs.getString("JOB"));
System.out.println(rs.getString("MGR"));
}
rs.close();
cstmt.close();
con.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
}
create or replace procedure testproc(v_empno varchar2, rs out SYS_REFCURSOR) is
begin
open rs for
select * from emp where empno = v_empno;
end testproc;
给你个java版的
o_cur OUT SYS_REFCURSOR
)
IS
BEGIN
open o_cur for
select * from a;
END;
-------
自己好好看看把 ,加油