为什么这个查询在11g上运行时会在10g上抛出ORA-00942?

Den*_*ret -4 sql oracle oracle10g oracle11g

我在11g安装上执行此查询没有问题:

SELECT
    PRODUCT_INFOS_idm.FIELD_VALUE "mother_id",
    PRODUCT_INFOS_ep.FIELD_VALUE "product_thickness",
    COIL_INFOS.TIME_STAMP,
    COIL_INFOS.IN_THICKNESS,
    COIL_INFOS.MEASURED_LENGTH,
    COIL_INFOS.MEASURED_WIDTH,
    COIL_INFOS.PARAM_SET_TOP_SIDE,
    COIL_INFOS.PARAM_SET_BOTTOM_SIDE
FROM
    COIL_INFOS
INNER JOIN
    PRODUCT_INFOS PRODUCT_INFOS_idm
    on PRODUCT_INFOS_idm.COIL_ID_SYSTEM=COIL_INFOS.COIL_ID_SYSTEM
    and PRODUCT_INFOS_idm.TIME_STAMP=COIL_INFOS.TIME_STAMP
    and PRODUCT_INFOS_idm.FIELD_NAME='ID bobina'
INNER JOIN  
    PRODUCT_INFOS PRODUCT_INFOS_ep
    on PRODUCT_INFOS_ep.COIL_ID_SYSTEM=COIL_INFOS.COIL_ID_SYSTEM
    and PRODUCT_INFOS_ep.TIME_STAMP=COIL_INFOS.TIME_STAMP
    and PRODUCT_INFOS_ep.FIELD_NAME='Anchura'
WHERE
    (COIL_INFOS.COIL_ID_SYSTEM LIKE '14051800' OR COIL_INFOS.COIL_ID LIKE '14051800')
Run Code Online (Sandbox Code Playgroud)

但是当我的客户(可能安装了10g)执行它时,他就会得到它

ORA-00942: table or view does not exist
Run Code Online (Sandbox Code Playgroud)

其他查询显示他具有相同的表和列.以下查询执行没有问题:

select count(*) from COIL_INFOS
select count(*) from PRODUCT_INFOS
Run Code Online (Sandbox Code Playgroud)

可能是什么问题?某处有语法错误吗?我怀疑Oracle版本存在问题(我已经不得不删除我通常用于列别名的"as").Oracle 10g是否支持表别名?

APC*_*APC 5

我们可以获得ORA-00942的原因有多种.

  1. 最明显的一个是,数据库中不存在该表.这很容易检查数据字典视图,例如DBA_TABLES.
  2. 该表存在但我们错误地引用它.常见的情况是使用双引号创建表格的混合大小写的名称; 当发生这种情况时,我们总是要用双引号引用带有混合大小写名称的表名,因为EMPLOYEES != "Employees".
  3. 该表由不同的用户拥有,当我们调用它时,我们的代码不包含模式名称(我们也没有同义词).
  4. 该表由不同的用户拥有,该用户未授予我们特权.
  5. 该表由不同的用户拥有,该用户通过角色授予我们特权,但我们希望在存储过程或视图中引用它.在这种情况下,我们必须直接拥有授予用户的权限,因为Oracle Security模型以这种方式工作.

鉴于你说"其他查询显示他有相同的表和列",我们可以排除第一个选项,可能排除第二个选项.因此,很可能是缺少同义词或缺少权限的问题.