Инструкция 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 answers
Обычно это имеет одну из четырех возможных проблем
- Вы не подключаетесь к базе данных, как вы думаете (возможно, это не так)
- У вас нет разрешения на стол (см. Ответ Джастина Кейва относительно Гранта)
- Возможно, вам потребуется добавить владельца к имени таблицы, например
select * from DB_USER.mantis_bug_table
(См. Ответ Джастина Кейва относительно синонимов, если вы не хотите указывать имя таблицы) - Таблица действительно не существует, возможно, орфографическая ошибка
Вы можете диагностируйте это, выполнив следующее
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-скрипт, не имеет доступа к таблице, вам понадобится администратор базы данных или владелец таблицы, чтобы
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 в разделе строка соединения_строка