-4

我在 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')

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

ORA-00942: table or view does not exist

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

select count(*) from COIL_INFOS
select count(*) from PRODUCT_INFOS

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

4

3 回答 3

5

我们可能会得到 ORA-00942 有几个原因。

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

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

于 2012-10-23T12:48:32.030 回答
1

正如 Bob 在评论中所暗示的那样,问题是由于 Oracle 10g 的错误版本造成的。

有一些服务器使用相同的模式和相同的查询,只有版本 10.2.0.1.0 的服务器有问题。Oracle 专家认为该错误在 10.2.0.4 上不存在,但我无法访问 Oracle 错误数据库。

由于修补服务器对我们的客户来说是不可能的,我们最终通过为这个查询创建一个视图来解决这个错误。

TLDR :当 Oracle 说某个版本有缺陷并且不应该使用时,就不应该使用它。

于 2013-07-16T13:36:32.080 回答
0

Oracle版本没有问题。您正在使用标准查询,这些查询甚至可以在比 10 更旧的 Oracle 版本中使用。

我怀疑以下一项或多项是正确的:

  • 您的 11g 数据库中可能有同义词,但在客户端的 10g 中没有。
  • 客户端使用不同的凭据来测试表中的 select count(*),而不是用于运行查询的凭据。
于 2012-10-23T12:47:58.863 回答