PL/SQL: ORA-00942: 表或视图不存在

Posted

技术标签:

【中文标题】PL/SQL: ORA-00942: 表或视图不存在【英文标题】:PL/SQL: ORA-00942: table or view does not exist 【发布时间】:2012-11-05 17:01:43 【问题描述】:

当我尝试运行他的脚本部分时,Oracle 11G 中出现此错误 'PL/SQL: ORA-00942: table or view does not exist'。似乎 select 语句没有从游标中解析变量的名称。需要帮助以确保这可以从游标中读取表名变量。

DECLARE
  ITEM_ERROR     NUMBER;
  CNT_SITE       VARCHAR2(46);

  CURSOR C_SITEID IS
     SELECT OBJECTNAME,ATTRIBUTENAME FROM MAXATTRIBUTE    WHERE ATTRIBUTENAME LIKE 'SITE%'   GROUP BY OBJECTNAME,ATTRIBUTENAME, COLUMNNAME;            
     SITEIDRec    C_SITEID%RowType;

 BEGIN
 BEGIN
 OPEN C_SITEID;
 LOOP
   FETCH C_SITEID into SITEIDRec;
   EXIT WHEN C_SITEID %NOTFOUND;
       BEGIN  
         SELECT COUNT(SITEID) into CNT_SITE FROM SITEIDRec.OBJECTNAME
          WHERE  SITEID  IN ('COLLEGE NANO SCI ENG-TGCM','FREESCALE-BALAZS','TGCM-GLOBAL FOUNDRIES','INTL RECTIFIER-TGM','TGCM-DMOS5','TGCM-IMFT','TGCM-TRIQUINT','GP-TRIQUINT');
       EXCEPTION
          WHEN NO_DATA_FOUND THEN NULL;
       END;
 END LOOP;
 --COMMIT;
 CLOSE C_SITEID;
 --COMMIT;
 EXCEPTION
    WHEN NO_DATA_FOUND THEN NULL;
 END;
 --COMMIT;
  EXCEPTION
    WHEN OTHERS THEN
    MSG_TEXT := SUBSTR(SQLERRM,1,200);
  --COMMIT;
   raise;
END;

【问题讨论】:

【参考方案1】:

我认为您的查询中有FROM TableName missing,因此它是正确的抱怨。

SELECT COUNT(SITEID) into SITEIDRec.OBJECTNAME
      WHERE SITEID IN 
             ('COLLEGE NANO SCI ENG-TGCM','FREESCALE-BALAZS',
               'TGCM-GLOBAL FOUNDRIES','INTL RECTIFIER-TGM','TGCM-DMOS5',
               'TGCM-IMFT','TGCM-TRIQUINT','GP-TRIQUINT');

请通过添加From TableName 更正您的查询。

编辑:尝试使用EXECUTE IMMEDIATE,如下所示

 EXECUTE IMMEDIATE 'SELECT COUNT(SITEID) into CNT_SITE FROM ' 
                    || SITEIDRec.OBJECTNAME ||
         ' WHERE SITEID IN (''COLLEGE NANO SCI ENG-TGCM'',''FREESCALE-BALAZS'',
               ''TGCM-GLOBAL FOUNDRIES'',''INTL RECTIFIER-TGM'',''TGCM-DMOS5'',
               ''TGCM-IMFT'',''TGCM-TRIQUINT'',''GP-TRIQUINT'')';

【讨论】:

我有它,它似乎是一个错字。添加它之后,即使从光标中获取它,我似乎仍然没有将表名值解析到 select 语句中。 @SwissJura:检查答案中的更新部分是否有帮助。这个想法是创建一个 SQL 字符串并使用EXECUTE IMMEDIATE(动态查询)运行它 @Ben:虽然我建议它是一个字符串值。已删除,因为它不是必需的。 @SwissJura:我不知道如何,但最后看到了into CNT_SITE。我刚刚更正了查询。您可以尝试更新后的查询并告诉我吗? 嗨 Yogendra,在这里运行我的简单脚本的这一部分时,我仍然收到“表或视图不存在”错误。当我在 SQl Developer for oracle 中运行时,任何人都可以帮我看看这个问题吗?

以上是关于PL/SQL: ORA-00942: 表或视图不存在的主要内容,如果未能解决你的问题,请参考以下文章

ORA-00942: 表或视图不存在,即使它存在

SQL 错误:ORA-00942 表或视图不存在

BatchUpdateException:ORA-00942:表或视图不存在

ORA-00942: 使用 iBatis 的表或视图不存在

ORA-00942:表或视图不存在 低级错误一例

ORA-00942: 表或视图不存在 - Oracle