以下是我参考别人创建好的储存过程,在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)
我怎么修改以下代码,在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)
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)
你试试吧,我在c#里就要这么调