//创建包,在包中创建refcursor
CREATE OR REPLACE PACKAGE "TYPES"
AS
  TYPE refcursor IS REF CURSOR; 
END; //创建存储过程 
CREATE OR REPLACE PROCEDURE obtainpartnumberproc ( 
  leftobid  IN      VARCHAR2, 
  rst        IN OUT  TYPES.refcursor 

IS 
  v_sqlstring  VARCHAR2 (1000); 
BEGIN 
  v_sqlstring := 
        'SELECT CLASS2,RIGHT,W2ISBORROWED FROM PDMM31A.ASSMSTRC WHERE LEFT=' 
      || leftobid;   OPEN rst FOR v_sqlstring; 
END obtainpartnumberproc; 
//在java中我是这样调用的 
CallableStatement cstmt = null ;
ResultSet rs = null ;
try{
    
        string callSql = "{ call obtainpartnumberproc( ?,? )}";
        cstmt = con.prepareCall(callSql); 
        //leftobid为一字符串变量
         cstmt.setString( 1,leftobid);
        cstmt.registerOutParameter( 2,oracle.jdbc.OracleTypes.CURSOR ) ;
        cstmt.execute();
        rs = ( ResultSet )cstmt.getObject( 2 );
        while (rs.next()) {
        ……
         }
    
}
在执行时报下列错误:
java.sql.SQLException: ORA-00942: 表或视图不存在
ORA-06512: 在"SYSTEM.OBTAINPARTNUMBERPROC", line 12
ORA-06512: 在line 1 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289
        …………请问我的这段代码错误在哪里呢?

解决方案 »

  1.   

    在sqlplus中创建包和存储过程时,都显示创建成功啊,可是为什么调用时会报这样的错误呢??在线等……
      

  2.   

    楼主访问的是这张表,
    PDMM31A.ASSMSTRC
    PDMM31A是用户名,ASSMSTRC是表名,是吗?那么java代码中,创建连接时用的用户名是什么?
    他有权限能看到PDMM31A.ASSMSTRC这张表吗?
      

  3.   

    在存储过程中使用要显示授权,
    grant select on PDMM31A.ASSMSTRC  to java中的用户;
      

  4.   

    创建连接时我用的是system用户,我在java中通过select *from PDMM31A.ASSMSTRC where LEFT=leftobid访问数据库一点问题没有,可是通过存储过程来访问就出现上面的错误,这是为什么呢?
      

  5.   

    我用system用户登录数据库运行grant命令,显示“没有足够权限”。而公司规定我们只有用system用户的权限,在这样的情况下我该怎么做呢?