我现在想实现一个判断ORACLE中一个视图是否存在,如果存在就删除。在程序中我这样写的:(dbcontroler是一个封装了ADO操作的类的对象)try
 {
 #pragma region [删掉老的视图]
  csSqlText.Format("SELECT COUNT(*) AS 视图计数 FROM SYS.ALL_VIEWS WHERE VIEW_NAME='%s';",csViewName);
  if (!dbcontroler.Connect_to((_bstr_t)m_csOracleConnectionText))  return;
  if (!dbcontroler.OpenRecordSet(csSqlText))  return;
  if ( dbcontroler.p_RecordSet->ADOEOF)   return;
  dbcontroler.p_RecordSet->MoveFirst();
  iViewCounter = dbcontroler.p_RecordSet->GetCollect("视图计数");
  if (iViewCounter > 0)
  {
   csSqlText.Format("DROP VIEW %s",csViewName);
   dbcontroler.UpDataDB(csSqlText);
  }
  dbcontroler.p_RecordSet->Close();
  dbcontroler.p_Connection->Close(); }
 catch(_com_error e)
 {
  CString errorString;
  errorString.Format(_T("数据库异常 ,异常信息:%s"),e.ErrorMessage());
  AfxMessageBox(errorString);
  return ;
 }总是提示视图不存在。但是,我直接在oracle中执行"SELECT COUNT(*) AS 视图计数 FROM SYS.ALL_VIEWS WHERE VIEW_NAME='去年产量'";是可以的。这时为什么?如何才能在程序里面实现视图的删除呢?
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/leoandjill/archive/2009/11/30/4909240.aspx

解决方案 »

  1.   

    建议单步调试一下,把sql语句打出来放在pl/sql下执行一下,看看执行结果是怎么样的?
      

  2.   

      csSqlText.Format("SELECT COUNT(*) AS 视图计数 FROM SYS.ALL_VIEWS WHERE VIEW_NAME='%s';",csViewName); 
    这里csViewName是否正确值。
    Format中,'%s'后的分号是否可以不写
      

  3.   

    你用TRACE语句把你的SQL语句输出,然后拷贝到PLSQL上运行看看。。
      

  4.   

    谢谢楼上各位的提示,但是我都试过了。还是不行。最终的解决办法是不判断了,绕过了这一步。在创建视图的时候用的CREATE OR REPLACE VIEW...解决的。