CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) AS
BEGIN
.....
END TESTB;
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521: hyq ";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
CallableStatement cstmt = null;
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, " hyq ", " hyq ");
cstmt = conn.prepareCall("{ call HYQ.TESTB(?,?) }");
cstmt.setString(1, "100");
cstmt.registerOutParameter(2, Types.VARCHAR);
cstmt.execute();
String testPrint = cstmt.getString(2);
3.返回列表
由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分,
建一个程序包。如下:
CREATE OR REPLACE PACKAGE TESTPACKAGE AS
TYPE Test IS REF CURSOR;
end TESTPACKAGE;
2,建立存储过程,存储过程为:
CREATE OR REPLACE PROCEDURE TESTC(p out TESTPACKAGE.Test) IS
BEGIN
......
END TESTC;
可以看到,它是把游标(可以理解为一个指针),作为一个out 参数来返回值的。
------------------
proc = conn.prepareCall("{ call hyq.testc(?) }");
proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);
proc.execute();
rs = (ResultSet)proc.getObject(1);