Оператор 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

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

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

3 4

3 ответа:

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

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

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

SELECT * FROM ALL_TABLES WHERE UPPER(table_name) = 'MANTIS_BUG_TABLE'
  • Какой пользователь Oracle владеет таблицей?
  • имеет ли пользователь Oracle, к которому подключается ваш PHP-скрипт, доступ к этой таблице?
  • Существует ли общий или частный синоним для таблицы 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) ссылаться на таблицу без полного имени таблицы.

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

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

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