存储进程的名字假设是a
然后你执行sql语句的时候就直接执行a 就行了,然后查看结果

解决方案 »

  1.   

    lczddd(李早乐),存储过程我是建立在数据库里的呀,什么叫“那段脚本要先执行一下,要在服务器上产生一个名字为a的存储进程”呀,该怎么执行呢?希望给出代码。谢谢。
      

  2.   

    存储过程的那段代码,你可以用TOAD工具编译一下!对了,你在数据库里面怎么建存储过程啊?
      

  3.   

    CallableStatement statement;
    statement=con.prepareCall("{call sp_BackupData(?)}");
    statement.registerOutParameter(1,java.sql.Types.VARCHAR);
    statement.setString(1,varDate);
    statement.execute();
    statement.close();sp_BackupData (x)    is my procedure
      

  4.   

    /*执行一条insert语句并传参数*/
    create or replace procedure p_test2(i in number) as
    begin
    insert into t values (i,'x'||to_char(i));
    commit;
    end;
    /<%@ page language="java" contentType="text/html;charset=gb2312"%>
    <%@page import="java.sql.*"%>
    <html>
    <body>
    <table>
    <tr><td>aaa</td><td>bbb</td></tr>
    <%
    String driver = "oracle.jdbc.driver.OracleDriver";
    String strUrl = "jdbc:oracle:thin:@192.168.1.6:1521:db";
        
    Class.forName(driver);
        Connection conn = DriverManager.getConnection(strUrl, "scott", "tiger"); String procedure = "{call p_test2 (?) }";
    CallableStatement cstmt = conn.prepareCall(procedure);
    cstmt.setInt(1,33);
    cstmt.executeUpdate(); Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery("select * from t"); while(rs.next())
    {
    out.println("<tr><td>" + rs.getString(1) + "</td><td>" + rs.getString(2) + "</td></tr>");
    } rs.close();
        stmt.close();
    conn.close();
    %>
    </table>
    <p>
    <%
    out.print(conn.isClosed());
    %></body>
    </html>
    </body> 
    </html>
      

  5.   

    把过程代码作为字符串,在java中调用execute()方法执行。
      

  6.   

    可能我没有把意思说清楚
    我的存储过程是已经建好的,现在是要把使用这个存储过程的代码封装在JAVA里,然后在JSP中调用执行,最后返回成功与否的信息到JSP中输出。
      

  7.   

    存储过程是存储在數據庫里的,他不屬於其他程序.自然不能封装在JAVA里只能在JSP中调用(此處)方法上面已經給出!!!
      

  8.   

    還是說你想用jsp中執行sql語句的形式來實現這個存储过程的功能?
      

  9.   

    不是的。
    我只是想把调用过程的语句写在JAVA里供JSP调用并判断是否执行成功。
    部分代码如下:
    JAVA部分:
    public boolean executeUpdate_1(String ls_bh_1,String ls_bh_2) 
    {
     boolean bupdate=false;
     try 
     {
      conn=DriverManager.getConnection(sConnStr,"labour","prospect");
      Statement stmt=conn.createStatement();
      CallableStatement cstmt = conn.prepareCall("{call labour_xtgl.Pro_unitelabour(?,?)}");
      cstmt.setString(1,ls_bh_1);
      cstmt.setString(2,ls_bh_2);  int rowCount = cstmt.executeUpdate();
      if(rowCount!=0)
      {
       bupdate=true;
      }
     }
     catch(SQLException ex) 
     {
      System.err.println("db.executeUpdate: " + ex.getMessage());
     }
     return bupdate;
    }JSP部分:ls_bh_1 = obj_1.toString();
    ls_bh_2 = obj_2.toString();boolean update = false;xtgl_gg gg = new xtgl_gg();update = gg.executeUpdate_1(ls_bh_1,ls_bh_2);if(update)
    {
     out.print("成功");
    }
    else
    {
     out.print("失败");
    }我现在执行的结果总是显示“失败”,这个存储本身是肯定没问题的。我想知道是不是我哪里写错了。
      

  10.   

    在JSP中调用存储过程:
    CallableStatement statement;
    statement=con.prepareCall("{call sp_BackupData(?)}");
    statement.registerOutParameter(1,java.sql.Types.VARCHAR);
    statement.setString(1,varDate);
    statement.execute();
    statement.close();sp_BackupData (x)    is my procedure
      

  11.   

    现在的关键是我想把
    CallableStatement statement;
    statement=con.prepareCall("{call sp_BackupData(?)}");
    statement.registerOutParameter(1,java.sql.Types.VARCHAR);
    statement.setString(1,varDate);
    statement.execute();
    statement.close();
    这些内容放到BEAN里呀,然后就是要判断它的执行是否成功。
      

  12.   

    可以的,寫法不變
    该存储过程无返回值
    statement.registerOutParameter(1,java.sql.Types.VARCHAR);
    去掉
      

  13.   

    那我怎么知道他是不是正确的执行了呢?
    statement.setString(1,varDate);这句话改成cstmt.setString(1,ls_bh_1);
    可以吗?varDate指的是具体的数据类型呢还是具体的参数呀?
      

  14.   

    不好意思,varDate是具体的参数.
    我判斷是不是正确的执行的方法是看是否有例外產生.
      

  15.   

    还是不行呀。我直接在JSP里面使用的时候它出现了如下错误java.sql.SQLException: 
    /?SQL92 ? 12: labour_xtgl
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:210)
    at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:829)
    at oracle.jdbc.driver.OracleSql.handleToken(OracleSql.java:152)
    at oracle.jdbc.driver.OracleSql.handleODBC(OracleSql.java:112)
    at oracle.jdbc.driver.OracleSql.parse(OracleSql.java:64)
    at oracle.jdbc.driver.OracleConnection.nativeSQL(OracleConnection.java:762)
    at oracle.jdbc.driver.OracleStatement.expandSqlEscapes(OracleStatement.java:4790)
    at oracle.jdbc.driver.OracleStatement.parseSqlKind(OracleStatement.java:4779)
    at oracle.jdbc.driver.OraclePreparedStatement.&lt;init>(OraclePreparedStatement.java:209)
    at oracle.jdbc.driver.OracleCallableStatement.&lt;init>(OracleCallableStatement.java:102)
    at oracle.jdbc.driver.OracleCallableStatement.&lt;init>(OracleCallableStatement.java:86)
    at oracle.jdbc.driver.OracleConnection.privatePrepareCall(OracleConnection.java:736)
    at oracle.jdbc.driver.OracleConnection.prepareCall(OracleConnection.java:622)
    at _prospect._xtgl._xtgl_0ryxx_04_02__jsp._jspService(/prospect/xtgl/xtgl_ryxx_4_2.jsp:63)
    at com.caucho.jsp.JavaPage.service(JavaPage.java:87)
    at com.caucho.jsp.JavaPage.subservice(JavaPage.java:81)
    at com.caucho.jsp.Page.service(Page.java:474)
    at com.caucho.server.http.FilterChainPage.doFilter(FilterChainPage.java:166)
    at com.caucho.server.http.Invocation.service(Invocation.java:277)
    at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:129)
    at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:216)
    at com.caucho.server.http.HttpRequest.handleConnection(HttpRequest.java:158)
    at com.caucho.server.TcpConnection.run(TcpConnection.java:140)
    at java.lang.Thread.run(Thread.java:484)JSP源文件如下:<%@ page contentType="text/html;charset=gb2312" %>
    <%@ page import="java.sql.*" %>
    <%@ page import="java.util.Date" %>
    <%@ page language="java" %>
    <%@ page import="com.prospect.driver.*"%>
    <%@ page import="oracle.jdbc.driver.*"%>
    <%@ page import="com.prospect.utils.*"%>
    <%@ page import="java.io.PrintStream"%>
    <%@ page import="java.sql.SQLException"%>
    <%@ page import="java.util.Hashtable"%>
    <%@ page import="java.io.*"%>
    <%@ page import="java.util.*"%>
    <%@ page import="javax.*"%><%
    String sDBDriver="oracle.jdbc.driver.OracleDriver";  
    String sConnStr="jdbc:oracle:thin:@192.168.100.39:1521:gllf";
    Connection conn=null;conn=DriverManager.getConnection(sConnStr,"labour","prospect");
    //Statement stmt=conn.createStatement();String bh=request.getParameter("bh");
    Object obj_1 = session.getAttribute("bh_1");
    Object obj_2 = session.getAttribute("bh_2");
    String ls_bh_1,ls_bh_2;ls_bh_1 = obj_1.toString();
    ls_bh_2 = obj_2.toString();
    CallableStatement statement=conn.prepareCall("{labour_xtgl.Pro_unitelabour(?,?)}");
    //statement.registerOutParameter(1,java.sql.Types.VARCHAR);
    statement.setString(1,ls_bh_1);
    statement.setString(2,ls_bh_2);
    statement.execute();
    statement.close();%>
      

  16.   

    CallableStatement statement=conn.prepareCall("{labour_xtgl.Pro_unitelabour(?,?)}");------->
    CallableStatement statement=conn.prepareCall("{labour_xtgl.Pro_unitelabour[(?,?)]}");
    可不可以?
      

  17.   

    to icystone(石冰),还是不行啊,还是一样的错误。
      

  18.   

    出错的原因是这个:
    CallableStatement statement=conn.prepareCall("{labour_xtgl.Pro_unitelabour(?,?)}");
    应该是
    CallableStatement statement = conn.prepareCall("{call labour_xtgl.Pro_unitelabour(?,?)}");
    少了一个call至于前面那个为什么只显示“失败”是因为你不能通过executeUpdate的返回值判断运行是否成功,你可以在stored procedure中返回1或0来判断运行是否成功。
     
      

  19.   

    executeUpdate的返回值不能表示是否执行成功