如题:存储过程肯定是存在的,表也是存在的,但不知道什么,总是失败。
[2004-12-06 19:06:37]oexec()  Sp() 失败,原因:ORA-06550: line 1, column 7:
PLS-00201: identifier 'SP_TEST' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
我把存储过程换成一个select 语句,提示:
原因:ORA-00942: table or view does not exist
只有 sprintf(sqlText,"select sysdate from dual ");才没有问题。
小弟调试了N次还是这个问题,数据库用户是dba,我在网上找了一下,一个帖子说是参数名要一致,这个我也是这样的,但就是不行,大家帮我想想可能的原因,先谢谢了。第一次使用oci。全部照着例子。

解决方案 »

  1.   

    应该写上UserName.table  这样系统才能找到相应用户下的table ,stored procedure .
      

  2.   

    oracle比较变态,而且对硬件要求奇高,建意不用也罢
      

  3.   

    原因:ORA-06550: line 1, column 7:
    PLS-00201: identifier 'TEST.SP_TEST' must be declared
    ORA-06550: line 1, column 7:
    PL/SQL: Statement ignored
    还是这样,是不是TEST没有表的权限,但是我用test进去,可以看到sp_test,这个存储过程也是我刚才在test下创建的。大家再帮帮我
      

  4.   

    int TDBAccess::_Resume(CString mNumber)
    {
    char sqlText[512]; char Number[21];
    int  OutResult = 1;
             strcpy(Number,(LPCTSTR)mNumber );
    sprintf(sqlText,"begin %s.Sp_TEST(:Number,:OutResult); end;",m_userID); text * execText = (text *)sqlText;
    if(oparse(&cdaall,execText,-1,1,2))
    {
    CloseDatabase();
    if( OpenDatabase() != JFK_Error_OK )
    {
    m_logfile->Trace(0,"\t!!!!!!! reopen db for _Resume fail() !!!!!!!\n");
    return RETURN_FAIL;
    } if(oparse(&cdaall,execText,-1,1,2))
    {
    m_logfile->Trace(0,"\t!!!!!!! oparse() 失败 !!!!!!!\n");
    return RETURN_FAIL;
    }
    }
       
        if(obndrv(&cdaall, (ub1  *)":Number", -1,
             (ub1  *)&( CardNumber ), (sword)sizeof( Number ),
         SQLT_STR, -1, (sb2 *) 0, (text *) 0, -1, -1))              
    {
    m_logfile->Trace(0,"\t!!!!!!! obndrv()Number 失败 !!!!!!!\n");
    return RETURN_FAIL;
    }
     if(obndrv(&cdaall, (ub1  *)":OutResult", -1,
             (ub1  *)&(OutResult), (sword)sizeof(OutResult),
         INT_TYPE, -1, (sb2 *) 0, (text *) 0, -1, -1))              
    {
    m_logfile->Trace(0,"\t!!  obndrv() OutResult 失败  !\n");
    return RETURN_FAIL;
    }
        if(oexec(&cdaall))
    {
    text errormsg[900]="";
    oerhms(&ldaall, cdaall.rc, errormsg, (sword) sizeof (errormsg));
    m_logfile->Trace(0,"\t!!!!!!! oexec()  Sp_TEST 失败,原因:%s !\n",errormsg);
    return RETURN_FAIL;
    }    if (ocom(&ldaall))
    {
    m_logfile->Trace(0,"\t!!!!!!! ocom() Sp_TEST失败 !!!\n");
    return RETURN_FAIL;
    } return OutResult;
    }以上没有语法错误,语句也是正确的。要不
    为什么报错是: identifier 'TEST.SP_TEST' must be declared
      

  5.   

    确认一下表和过程是不是在你当前登陆用户的schema下面,如果不是要加上schema的名字。
      

  6.   

    我加了登陆用户的名字sprintf(sqlText,"begin %s.Sp_TEST(:Number,:OutResult);end;",m_userID);
    我用TOAD运行语句是正确的。还不知道原因,大家多帮帮忙,提示一下可能的情况。
      

  7.   

    begin test.Sp_test(:Number,:OutResult); end;
    我运行上面语句,执行正确。
      

  8.   

    是在TOAD上运行的。大家都看看吧,在线等待