2011-08-26 61 views
4

希望得到一個簡單的問題。Oracle SELECT語句不起作用 - ORA-00942

error_reporting(E_ALL); 
    ini_set('display_errors', '1'); 
    $c = oci_connect('whatmyusrnameis', 'whatmypwdis', 'host'); 
    if ($c) { 
      echo 'connection'; 

    } 
    $s = oci_parse($c, 'select * from mantis_bug_table'); 
    oci_execute($s); 

警告oci_execute(): ORA-00942: table or view does not exist

下面的結果,但連接不會導致任何錯誤和數據庫表確實存在,它不是空的。

任何想法???謝謝 :)。

+0

您正在訪問的模式中的表(您可能需要完全限定它)還是具有同義詞? – Ollie

+0

你使用EBS(企業商務套房)嗎?如果你們,你可能必須設置你的會議能夠看到一些表/視圖/數據... –

+1

投票結束請:)...我的ORACLE已經席捲我的表名沒有我知道! mantis_bug_table是m_bug_t:S – ale

回答

9

這通常有四種可能出現的問題

  1. 你沒有連接到你以爲你是數據庫(可能並非如此)
  2. 您沒有權限表一(見Justin Cave關於授予的回答)
  3. 您可能需要將所有者添加到表名中,例如select * from DB_USER.mantis_bug_table(見賈斯汀洞的關於同義詞的答案,如果你不希望限定表名)
  4. 表真的不存在可能拼寫錯誤

您可以通過運行以下

SELECT * FROM ALL_TABLES WHERE UPPER(table_name) = 'MANTIS_BUG_TABLE' 
診斷本在

oci_connect('whatmyusrnameis', 'whatmypwdis', 'host/**YOUR_DB**'); 

http://www.php.net/manual/en/function.oci-connect.php

+0

謝謝..有了這個查詢,你給了我我得到:IRA-00904「mantis_user_table」:無效的標識符 – ale

+0

hmm你在哪裏執行查詢? –

+0

請注意,除非表格被創建爲「mantis_bug_table」(即:區分大小寫),否則在查詢「ALL_TABLES」視圖時必須使用大寫名稱。 – NullUserException

-1

你應該像連接字符串點方案部分connection_string

+1

-1如果他們無法連接,他/她不會得到這麼遠。 – NullUserException

2
  • 什麼Oracle用戶擁有該表?
  • 您的PHP腳本連接的Oracle用戶是否可以訪問此表?
  • MANTIS_BUG_TABLE表有沒有公共或私人的同義詞?

如果該表已被其他用戶所擁有的,你可以嘗試完全限定表名

$s = oci_parse($c, 'select * from owner_of_table.mantis_bug_table'); 

如果你的PHP腳本使用不具有訪問表的用戶,你」會需要DBA或表來

GRANT SELECT ON owner_of_table.mantis_bug_table 
    TO whatmyusernameis; 

車主如果對錶的訪問和完全限定表名的作品,但你不希望有每次完全限定表名,你可以創建一個同義詞

CREATE [PUBLIC] SYNONYM mantis_bug_table 
    FOR owner_of_table.mantis_bug_table 

公有同義詞允許所有有權訪問表的用戶在不使用完全限定名的情況下引用它。私有同義詞僅允許同義詞的所有者(即whatmyusernameis)在沒有完全限定的表名的情況下引用該表。

+0

對於SYNONYM爲+1 –