Оператор Oracle SELECT не работает - ORA-00942 - PullRequest
4 голосов
/ 26 августа 2011

Надеюсь, простой вопрос.

    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 ]

9 голосов
/ 26 августа 2011

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

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

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

SELECT * FROM ALL_TABLES WHERE UPPER(table_name) = 'MANTIS_BUG_TABLE'
3 голосов
/ 26 августа 2011
  • Какой пользователь 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) ссылаться на таблицу без полного имени таблицы.

0 голосов
/ 26 августа 2011

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

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

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

...