Может ли OCI_CONNECT вызвать ORA-01438: значение, превышающее указанную точность, разрешено для этого столбца?

Мне интересно, может ли oci_connect () вызвать ошибку 1438, потому что я получаю это все время:

Предупреждение: oci_connect () [function.oci-connect]: ORA-00604: ошибка на рекурсивном уровне SQL 1 ORA-01438: значение, превышающее указанную точность, разрешено для этого столбца ORA-06512: строка 8 в / xxxxxx / some. php в строке 220

Это не зависит от того, какая таблица запрашивается. Кажется, что oci_connect () вставляет некоторый элемент отслеживания в некоторую таблицу sys, или, возможно, триггер связан с входом в систему. Но у меня нет разрешения выяснить эту проблему в sys.

Любая идея, что может быть причиной этой ошибки?

Обновить

Оракул выполняет некоторую регистрацию где-то автоматически из коробки без настройки специально? Могу ли я каким-то образом сказать, что оракул или PHP показывают мне, какая таблица или столбец затронута?

Обновление. Я узнал, что, когда я вызываю PHP Script в Bash напрямую, он работает нормально. Но вызов из Интернета вызовет озаглавленную проблему. Есть идеи?

Related of "Может ли OCI_CONNECT вызвать ORA-01438: значение, превышающее указанную точность, разрешено для этого столбца?"

error occurred at recursive SQL level 1 сообщения error occurred at recursive SQL level 1 подсказывает мне, что ошибка возникает в триггере. Я предполагаю, что есть триггер AFTER LOGON ON SCHEMA или DATABASE , и по какой-то причине он вызывает ошибку при попытке подключения к веб-серверу.

Вот пример того, как генерировать ошибку, которую вы получаете. У меня есть таблица под названием TINY с одним столбцом, который может принимать значения до 99:

 SQL> desc tiny;
  Имя Null?  Тип
  ----------------------------------------- -------- - ---------------------------
  N НОМЕР (2)

Теперь давайте создадим учетную запись пользователя и убедитесь, что они могут подключаться:

 SQL> создать пользователя fred, идентифицированного разблокировкой учетной записи fred;

 Пользователь создан.

 SQL> предоставить подключение к fred;

 Грант преуспел.

 SQL> connect fred / fred
 Связанный.

Хорошо – давайте запишемся назад как я и создаем триггер, который вызовет ошибку, если FRED попытается подключиться:

 SQL> connect luke / password
 Связанный.
 SQL> создать или заменить триггер after_logon_error_if_fred
   2 после входа в базу данных
   3 начинается
   4, если пользователь = 'FRED', тогда
   5 вставить в крошечные (n) значения (100);
   6 end if;
   7 конец;
   8 /

 Создан триггер.

Напомним, что наша таблица TINY может хранить только до 99. Итак, что происходит, когда FRED пытается подключиться?

 SQL> connect fred / fred
 ОШИБКА:
 ORA-00604: ошибка на рекурсивном уровне SQL 1
 ORA-01438: значение, превышающее указанную точность, разрешено для этого столбца
 ORA-06512: в строке 3

Помимо номера строки и добавленного бита PHP, это именно то сообщение, которое вы получили.

Если вы хотите увидеть, есть ли триггеры AFTER LOGON в вашей базе данных, попробуйте запустить запрос

 SELECT trigger_name, owner FROM all_triggers WHERE TRIM(triggering_event) = 'LOGON'; 

В моей базе данных (Oracle 11g XE beta) я получаю следующий вывод:

 ВЛАДЕЛЬЦЫ TRIGGER_NAME
 ------------------------------ -------------------- ----------
 AFTER_LOGON_ERROR_IF_FRED LUKE

Я не верю, что Oracle делает какие-либо изъяты из коробки, и я был бы удивлен, если и будет oci_connect PHP.

Я могу только предположить, почему ошибка возникает только для вашего веб-сервера, а не при запуске PHP из сценария bash. Возможно, триггер запрашивает V$SESSION и пытается выяснить, какая учетная запись пользователя пытается подключиться к базе данных?

Ну, в зависимости от столбца вы пытаетесь вставить число, которое больше разрешенных границ для numeric столбца, или вы пытаетесь вставить строку в varchar2(n) которого больше, чем n символов. Вот более подробная информация о типах данных Oracle.

Без более конкретной информации о том, что вставляется в какой столбец в какой таблице в строке 220 some.php , я не могу быть более прямой.