存储过程:
create or replace procedure insert_emp
 (empid in number,
 empname in varchar2,
 empsal in number)
 as
 begin 
  insert into emp(empno,ename,sal) values(empid,empname,empsal);
 end insert_emp;java代码:public class TestOracle { public static void main(String[] args) {
Connection conn = null;
CallableStatement cs = null;

String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
String name = "system";
String password = "123456";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url,name,password);
cs = conn.prepareCall("{call insert_emp(?,?,?)}");
cs.setInt(1, 30);
cs.setString(2, "Lucy");
cs.setInt(3, 4000);
cs.execute();
System.out.println("insert ok");
} catch (Exception e) {
e.printStackTrace();
} finally{
try {
cs.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}错误提示:
java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00201: identifier 'INSERT_EMP' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored存储过程使用完全ok,为什么java调用就提示这样的错误,小弟刚涉及这方面知识,请大家帮我一下,如何解决,谢谢。

解决方案 »

  1.   

    insert_emp(?,?,?)有这个存储过程?
      

  2.   

    你是用system这个用户建立的存储过程吗?不是的话,需要加上
         cs = conn.prepareCall("{call 用户模式名称.insert_emp(?,?,?)}");
    或者你这里代码里面登录名改成你建存储过程的那个用户,猜你应该是用SCOTT、tiger的。改成scott、tiger试试看。
      

  3.   

    还有,存储过程要在最后一行加 / 来表示它需要马上编译(sqlplus),如果是第3方工具如toad/plsqldev之类,不知道是否需要commit一下。
      

  4.   


    我是用system建的,你说的代码我程序里也有;
      

  5.   


       创建存储过程的用户和java连接数据库的用户不是同一个!
      

  6.   

    哦?
    你用system用户登录,在sqlplus里面执行:
    begin
      insert_emp(1,'test',1);
    end;
    /
    看看结果,怀疑你的存储过程根本就没有编译,system用户下默认好像没有emp表的,也许你建了或者我记错了。
      

  7.   

    我用 exec insert_emp(1,'test',1)再数据库里是可以实现插入功能的,但用java代码实现就报错误,还是原来的问题。
      

  8.   

    我是用system登录 创建存储过程的呀  java代码也是用system登录的 
    怎么是用户不一样呢?
      

  9.   

    换个普通用户创建过程和在java代码中使用。别用system
      

  10.   

    你确定system用户下有emp表吗?还是scott用户的emp表?
      

  11.   

    用非system用户,建立存储过程,连接测试应该就可以了