2012-10-23 30 views
-4

我在我的11g安裝執行這個查詢沒有問題:爲什麼這個查詢在10g上使用ORA-00942,而在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是否支持表格別名?

+3

顯然,您的客戶環境中未創建一個表(或視圖或同義詞)。 –

+1

他在正確的數據庫上執行它嗎? –

+0

仔細檢查用於連接到數據庫的用戶的模式。它看起來像是缺少一張桌子。 – Thilo

回答

1

正如Bob在評論中暗示的那樣,問題是由於Oracle 10g版本太差造成的。

有幾臺服務器上使用相同的模式和相同的查詢,只有版本爲10.2.0.1.0的服務器出現問題。 Oracle專家認爲該錯誤在10.2.0.4中不存在,但我無法訪問Oracle錯誤數據庫。

由於修補服務器對我們的客戶來說無可厚非,所以我們最終通過創建此查詢的視圖來解決該問題。

TLDR:當Oracle說一個版本有問題而不應該使用時,不應該使用它。

0

Oracle版本沒有問題。您正在使用標準查詢,將在更舊版本的Oracle的工作比10

我懷疑一個或多個以下的爲真:

  • 你可能有同義詞在你的11g數據庫,但不10g在客戶端。
  • 客戶端使用不同的憑據來測試從表中選擇計數(*)比用於運行查詢。
4

有幾個原因可能導致ORA-00942。

  1. 最明顯的一個是,該表不存在於數據庫中。這很容易檢查數據字典視圖,例如DBA_TABLES。
  2. 表存在,但我們錯誤地引用它。常見的情況是,該表是在雙引號中使用混合大小寫的名稱創建的;當發生這種情況時,我們總是必須使用雙引號引用混合大小寫名稱的表名,因爲EMPLOYEES != "Employees"
  3. 該表由其他用戶擁有,我們的代碼在我們調用它時不包含模式名稱(並且我們也沒有同義詞)。
  4. 該表由其他用戶擁有,並且該用戶尚未授予我們特權。
  5. 該表由其他用戶擁有,並且該用戶通過角色向我們授予了我們的權限,但我們希望在存儲過程或視圖中引用它。在這種情況下,我們必須直接授予我們的用戶權限,因爲Oracle安全模型就是這樣工作的。

鑑於您說「其他查詢顯示他具有相同的表格和列」,我們可以排除第一個選項,可能是第二個選項。所以這很可能是缺少同義詞或缺少權限的問題。

相關問題