【问题标题】:Oracle SELECT statement not working - ORA-00942Oracle SELECT 语句不起作用 - ORA-00942
【发布时间】:2011-11-04 14:57:04
【问题描述】:

希望是一个简单的问题。

    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

但连接不会导致任何错误,并且数据库表确实存在且不为空。

有什么想法吗???谢谢你:)。

【问题讨论】:

  • 您正在访问的架构中的表是(您可能需要完全限定它)还是它有同义词?
  • 您使用 EBS(企业商务套件)吗?如果是,您可能必须设置会话才能看到一些表/视图/数据...
  • 请投票结束 :)... 我的 Oracle 在我不知道的情况下缩短了我的表名! mantis_bug_table 是 m_bug_t :S
  • 我认为 Oracle 不会随意缩短您的表名...更有可能是您的 DBA 给了您一个更短的同义词,或者其他人更改了您的表名。
  • @alemaster 恕我直言,仅仅因为您问题中的假设之一不正确并不一定意味着它应该被关闭。有人可能有同样的假设,我相信我的回答和贾斯汀的回答涵盖了这一点。此外,将来有人可能会选择这个问题来给出 ORA-00942 的规范答案。见The Wikipedia of Long Tail Programming Questions

标签: php oracle ora-00942


【解决方案1】:

这通常有四个可能的问题之一

  1. 您没有连接到您认为的数据库(可能不是这种情况)
  2. 您没有使用该表的权限(请参阅 Justin Cave 关于 Grant 的回答)
  3. 您可能需要将所有者添加到表名中,例如select * from DB_USER.mantis_bug_table(如果您不想限定表名,请参阅 Justin Cave 关于同义词的回答)
  4. 该表确实不存在,可能是拼写错误

您可以通过运行以下命令来诊断此问题

SELECT * FROM ALL_TABLES WHERE UPPER(table_name) = 'MANTIS_BUG_TABLE'

【讨论】:

  • 谢谢.. 通过你给我的这个查询,我得到:IRA-00904 "mantis_user_table": invalid identifer
  • hmm 你在哪里执行查询?
  • 请注意,除非表创建为"mantis_bug_table"(即:区分大小写),否则在查询ALL_TABLES 视图时必须使用大写名称。
  • @NullUserException,从技术上讲,它取决于语言排序参数,但您的观点已被采纳。
  • @Conrad 啊,那是真的。但大多数安装默认区分大小写。
【解决方案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)引用没有完全限定表名的表。

【讨论】:

    【解决方案3】:

    您应该在连接字符串中指向方案,例如:

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

    查看connection_string部分中的http://www.php.net/manual/en/function.oci-connect.php

    【讨论】:

    • -1 如果他们无法连接,他/她就不会走到这一步。
    猜你喜欢
    • 2016-08-21
    • 1970-01-01
    • 2015-01-16
    • 2011-09-16
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    相关资源
    最近更新 更多