2011-08-26 60 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 –