以下是我参考别人创建好的储存过程,在oracle里面是可以正常显示的,现在的问题是
我怎么修改以下代码,在java里面调用的储存过程输出返回的信息
我把以下代码发上去----------------------oracle代码//先创建一个java源
create or replace and compile java source named "li_javaDemo16"--双引号引起来
as
import java.io.*;
import java.sql.*;
public class JavaDemo16{
public static void main(String arg[]){
System.out.println("hello world!");
}
  //用于做只有输入参数的存储过程调用的测试public static void dist(String t)throws IOException {
Runtime r=Runtime.getRuntime(); 
Process p=r.exec(t); 
BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream())); 
String inline; 
while(null!=(inline=br.readLine())){ 
     System.out.println(inline);   } 
}
}

//建立存储过程和函数
 create or replace procedure li_p_javaDemo16(tmp varchar2)
is
--language java name 'JavaDemo11.main(java.lang.String[])';
language java name 'JavaDemo16.dist(java.lang.String)';
/set serveroutput on
/
//对于有输出参数过程的调用call dbms_java.set_output(3000);declare
v_1 varchar2(100):='cmd /C dir';
v_2 varchar2(100);
begin
li_p_javaDemo16(v_1);
end; 
/
//执行上面的代码之后oracle返回我c盘里面的相关信息
Volume in drive C is WINXP
Volume Serial Number is 0C65-8236
Directory of c:\oracle\ora92\DATABASE
2008-06-17  02:06    <DIR>          .
2008-06-17  02:06    <DIR>          ..
2002-08-20  21:59            31,744 oradba.exe
2008-06-17  02:06    <DIR>          archive
2008-06-17  03:01               150 OraDim.Log
2008-06-17  02:12             1,536 PWDscott.ora
2008-06-17  02:09             2,560 SPFILESCOTT.ORA
2008-06-17  03:01             3,220 sqlnet.log
5 File(s)         39,210 bytes
3 Dir(s)     700,579,840 bytes freePL/SQL 过程已成功完成。 
--------------------------java类调用存储过程--------------------------
package b;
import java.sql.*;
import java.io.*;
public class P {
static String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;
static String DBURL = "jdbc:oracle:thin:@localhost:1521:SCOTT" ;  //mldn是数据库名字
static String DBUSER = "scott" ;                 //scott和tiger是oracle默认用户名和密码
static String DBPASSWORD = "tiger" ;
static Connection conn=null;

   static     ResultSet rs=null;  
   static Statement st=null;

public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
  conn= DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);  
          CallableStatement proc = null;
                 proc = conn.prepareCall("{call li_p_javaDemo16(?) }");
      proc.setString(1, "cmd /C dir");
     // proc.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR);
 
     proc.execute();    //   rs = (ResultSet)proc.getObject(1);
   //   while(rs.next())     //  {     //      System.out.println("<tr><td>" + rs.getString(1) + "</td><td>"+rs.getString(2)+"</td></tr>");    //   } }
}
          
//控制台报以下错误Exception in thread "main" java.sql.SQLException: ORA-06550: 第 1 行, 第 7 列: 
PLS-00201: 必须说明标识符 'LI_P_JAVADEMO16'
ORA-06550: 第 1 行, 第 7 列: 
PL/SQL: Statement ignored at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:590)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1973)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1119)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2191)
at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:2064)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2989)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:658)
at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:736)
at b.P.main(P.java:76)

解决方案 »

  1.   

    通过修改用户名是SYSTEM之后--------------------------java类调用存储过程-------------------------- 
    package b; 
    import java.sql.*; 
    import java.io.*; 
    public class P { 
    static String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ; 
    static String DBURL = "jdbc:oracle:thin:@localhost:1521:SCOTT" ;  //mldn是数据库名字 
    static String DBUSER = "scott" ;                //scott和tiger是oracle默认用户名和密码 
    static String DBPASSWORD = "tiger" ; 
    static Connection conn=null;   static    ResultSet rs=null;  
      static Statement st=null; 
    public static void main(String[] args) throws Exception { 
    // TODO Auto-generated method stub 
      Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); 
      conn= DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);  
              CallableStatement proc = null; 
                    proc = conn.prepareCall("{call li_p_javaDemo16(?) }"); 
          proc.setString(1, "cmd /C dir"); 
          rs=  proc.executeQuery();
          while(rs.next()){
              
              
             }
           } } 

              控制台报以下错误Exception in thread "main" java.sql.SQLException: ORA-00600: 内部错误代码,参数: [12259], [], [], [], [], [], [], [] at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
    at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
    at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:590)
    at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1973)
    at oracle.jdbc.ttc7.TTC7Protocol.fetch(TTC7Protocol.java:1231)
    at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:295)
    at b.P.main(P.java:63)