Оператор 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 ответа:
Обычно это имеет одну из четырех возможных проблем
- Вы не подключаетесь к базе данных, о которой думаете (вероятно, это не так)
- у вас нет разрешения на стол (см. ответ Джастина Кейва относительно Гранта)
- Возможно, вам потребуется добавить владельца к имени таблицы, например
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-скриптом, не имеет доступа к таблице, вам потребуется DBA или владелец таблицы, чтобы
GRANT SELECT ON owner_of_table.mantis_bug_table TO whatmyusernameis;
Если у вас есть доступ к таблица и полная квалификация имя таблицы работает, но вы не хотите, чтобы полностью квалифицировать имя таблицы каждый раз, вы можете создать синоним
Открытый синоним позволяет всем пользователям, имеющим доступ к таблице, ссылаться на нее без использования полного имени. Частный синоним позволяет только владельцу синонима (то есть whatmyusernameis) ссылаться на таблицу без полного имени таблицы.CREATE [PUBLIC] SYNONYM mantis_bug_table FOR owner_of_table.mantis_bug_table
Вы должны указать схему в строке соединения, как:
oci_connect('whatmyusrnameis', 'whatmypwdis', 'host/**YOUR_DB**');
Посмотрите на http://www.php.net/manual/en/function.oci-connect.php в разделе connection_string