Инструкция 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

Но соединение не приводит к каким-либо ошибкам, и таблица БД действительно существует, и она не пуста.

Есть идеи??? Спасибо:).

Author: OMG Ponies, 2011-08-26

3 answers

Обычно это имеет одну из четырех возможных проблем

  1. Вы не подключаетесь к базе данных, как вы думаете (возможно, это не так)
  2. У вас нет разрешения на стол (см. Ответ Джастина Кейва относительно Гранта)
  3. Возможно, вам потребуется добавить владельца к имени таблицы, например select * from DB_USER.mantis_bug_table (См. Ответ Джастина Кейва относительно синонимов, если вы не хотите указывать имя таблицы)
  4. Таблица действительно не существует, возможно, орфографическая ошибка

Вы можете диагностируйте это, выполнив следующее

SELECT * FROM ALL_TABLES WHERE UPPER(table_name) = 'MANTIS_BUG_TABLE'
 9
Author: Conrad Frix, 2011-08-26 18:09:21
  • Какому пользователю Oracle принадлежит таблица?
  • Имеет ли пользователь Oracle, к которому подключается ваш PHP-скрипт, доступ к этой таблице?
  • Существует ли публичный или частный синоним для таблицы MANTIS_BUG_TABLE?

Если таблица принадлежит какому-либо другому пользователю, вы можете попробовать полностью указать имя таблицы

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

Если пользователь, которого использует ваш PHP-скрипт, не имеет доступа к таблице, вам понадобится администратор базы данных или владелец таблицы, чтобы

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) ссылаться на таблицу без полного имени таблицы.

 2
Author: Justin Cave, 2011-08-26 15:12:11

Вы должны указать схему в строке подключения, например:

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

Посмотрите на http://www.php.net/manual/en/function.oci-connect.php в разделе строка соединения_строка

 -1
Author: Andrej Ludinovskov, 2011-08-26 15:09:23