-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 Security モデルがそのように機能するため、ユーザーに権限を直接付与する必要があります。

「他のクエリは、彼が同じテーブルと列を持っていることを示しています」と言うと、最初のオプション、おそらく2番目のオプションを除外できます。そのため、シノニムの欠落またはアクセス許可の欠落に問題がある可能性が最も高いです。

于 2012-10-23T12:48:32.030 に答える
1

ボブがコメントで示唆したように、問題は 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 でも機能する標準クエリを使用しています。

次の 1 つ以上が当てはまると思われます。

  • 11gデータベースにはシノニムがありますが、クライアントの10gにはありません。
  • クライアントは、クエリの実行に使用されたものとは異なる資格情報を使用して、select count(*) from table をテストしています。
于 2012-10-23T12:47:58.863 に答える