oracle 存储过程表结构: category(catId,catName,time)create or replace procedure ins_cat(catName in varchar2) asbegin
insert into song.category(catName,time) values(catName,sysdate);
end;调用java try{ 
    Connection con=ConDb.getConDb();
    CallableStatement cstm=con.prepareCall("{call ins_cat(?)}");
    cstm.setString(1,catName);
    cstm.execute();
    con.close();
    cstm.close();
  }catch(Exception e){
    e.printStackTrace();
  }
报错信息: Server startup in 2719 ms
java.sql.SQLException: ORA-06550: 第 1 行, 第 7 列: 
PLS-00201: 必须说明标识符 'INS_CAT'
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)
请高手指教,是什么原因??

解决方案 »

  1.   

    CallableStatement cstm=con.prepareCall("{call ins_cat(?)}");
    改成
    CallableStatement cstm=con.prepareCall("begin ins_cat(?);end;");
    试试
      

  2.   

    不行的话这样
    CREATE OR REPLACE PACKAGE MY_PKG AS
    PROCEDURE ins_cat(
        catName IN VARCHAR2
    );
    END MY_PKG;
    CREATE OR REPLACE PACKAGE BODY MY_PKG ASprocedure ins_cat(catName in varchar2) isbegin
    insert into song.category(catName,time) values(catName,sysdate);
    end ins_cat;
    END MY_PKG;
    把存储过程打进包里然后执行
    CallableStatement cstm=con.prepareCall("begin MY_PKG.ins_cat(?);end;");
    这样试试
      

  3.   

    如果还不行
    把 Connection 换成 OracleConnection;
    CallableStatement 换成 OracleCallableStatement
    在试试
      

  4.   

    其实就是很简单的把存储过程放在一个包里再调用
    你放完之后用下面得语句再试试吧CallableStatement cstm=con.prepareCall("{call MY_PKG.ins_cat(?)}");