用CallableStatement 一个例子:
String cString = "{?= call yourproc(?)}";//yourproc是你的存储过程
    CallableStatement cstmt = m_conn.prepareCall(cString);
    cstmt.registerOutParameter(1, Types.INTEGER);//设置第一个?
    cstmt.setString(2, Param);//设置第二个?
    cstmt.execute();
    int iRet = cstmt.getInt(1);

解决方案 »

  1.   

    <%-- testorafunc.jsp --%>
    <%--
    create or replace function decuple (cc number)
    return number as
    begin
    return cc * 10;
    end;
    /
    --%>
    <%@ page
    language="java"
    import="java.sql.*"
    contentType="text/html;charset=gb2312"
    %>
    <html>
    <body>
    <%
    String driver = "oracle.jdbc.driver.OracleDriver";
    String url = "jdbc:oracle:thin:@localhost:1521:oradb";
    String user = "scott";
    String password = "tiger";
    Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, password); CallableStatement cstmt = conn.prepareCall("{? = call decuple(?)}");
    cstmt.registerOutParameter(1, Types.INTEGER);
    cstmt.setInt(2, 100);
    cstmt.execute();

    out.println("<b>" + cstmt.getInt(1) + "</b>");
    cstmt.close();
    conn.close();
    %>
    </body>
    </html>
    <%-- testoraproc.jsp --%>
    <%--
    CREATE OR REPLACE PACKAGE Types AS 
       TYPE cursor_type IS REF CURSOR;
    END Types; 
    / CREATE OR REPLACE PROCEDURE GetEmpRS (p_deptno    IN  emp.deptno%TYPE,
    p_recordset OUT Types.cursor_type) AS 
    BEGIN 
       OPEN p_recordset FOR
         SELECT ename,
                empno,
                   deptno
         FROM   emp
         WHERE  deptno = p_deptno
         ORDER BY ename;
    END GetEmpRS;
    /
    --%>
    <%@ page
    language="java"
    import="java.sql.*,
    oracle.jdbc.driver.*"
        contentType="text/html;charset=gb2312"
    %>
    <html>
    <body>
    <table border="1">
    <%
    String driver = "oracle.jdbc.driver.OracleDriver";
    String url = "jdbc:oracle:thin:@localhost:1521:oradb";
    String user = "scott";
    String password = "tiger";
    Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, password);

    CallableStatement cstmt = conn.prepareCall("{call GetEmpRS(?, ?)}");
    cstmt.setInt(1, 30); // DEPTNO
    cstmt.registerOutParameter(2, OracleTypes.CURSOR); //REF CURSOR
    cstmt.execute();
    ResultSet rs = ((OracleCallableStatement) cstmt).getCursor(2);
    // ResultSet rs = (ResultSet) cstmt.getObject(2);
    ResultSetMetaData rsmd = rs.getMetaData();
    int numberOfColumns = rsmd.getColumnCount();
    %>
      <tr>
    <%
    for (int i = 0; i < numberOfColumns; i++)
    {
    %>
    <th><%= rsmd.getColumnName(i + 1) %></th>
    <%
    }
    %>
      </tr>
    <%
    while (rs.next())
    {
    %>
      <tr>
    <%
    for (int i = 0; i < numberOfColumns; i++)
    {
    %>
        <td><%= rs.getString(i + 1) %></td>
    <%
    }
    %>
      </tr>
    <%
    }
    %>
    </table>
    <%
    rs.close();
    cstmt.close();
    conn.close();
    %>
    </body>
    </html>