以下是我参考别人创建好的储存过程,在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 free PL/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)
      

  2.   

    scott.li_p_javaDemo16
    你试试吧,我在c#里就要这么调