Php OCI_CONNECT是否会导致ORA-01438:值大于此列允许的指定精度?

Php OCI_CONNECT是否会导致ORA-01438:值大于此列允许的指定精度?,php,oracle,ora-01438,Php,Oracle,Ora 01438,我想知道oci_connect()是否会导致1438错误,因为我一直都会遇到这种情况: 警告:oci_connect()[function.oci connect]:ORA-00604:错误 在递归SQL级别1 ORA-01438发生:值大于 此列ORA-06512允许的指定精度:在中的第8行 /第220行的xxxxxx/some.php 这并不取决于要查询的表。似乎oci_connect()正在某个sys表中插入一些trackingstaff,或者一个触发器与登录相关。但是我没有权限在sys中

我想知道oci_connect()是否会导致1438错误,因为我一直都会遇到这种情况:

警告:oci_connect()[function.oci connect]:ORA-00604:错误 在递归SQL级别1 ORA-01438发生:值大于 此列ORA-06512允许的指定精度:在中的第8行 /第220行的xxxxxx/some.php

这并不取决于要查询的表。似乎oci_connect()正在某个sys表中插入一些trackingstaff,或者一个触发器与登录相关。但是我没有权限在sys中解决这个问题

你知道这个错误的原因是什么吗

更新

oracle是否会自动在某个地方进行一些日志记录,而不进行专门的配置?我可以让oracle或PHP告诉我哪个表或列受到影响吗

更新
我发现,当我在Bash中直接调用PHP脚本时,它确实工作得很好。但来自web的呼叫将导致问题。有什么想法吗?

好吧,根据列的不同,您要么尝试插入一个大于
数值列所允许边界的数字,要么尝试在
varchar2(n)
列中插入一个长度超过
n
个字符的字符串。有关Oracle数据类型的更多详细信息


如果没有更具体的信息来说明在
some.php
的第220行的哪个表的哪个列中插入了什么,我就无法提供更直接的帮助了。

好吧,根据列的不同,您可以尝试插入一个大于
数值
列允许范围的数字,或者您试图将一个字符串插入长度超过
n
个字符的
varchar2(n)
列中。有关Oracle数据类型的更多详细信息


如果没有更具体的信息来说明在
some.php
的第220行的哪个表的哪个列中插入了什么,我就无法提供更直接的帮助了。

递归SQL级别1发生的
错误消息向我暗示错误是在触发器中产生的。我猜在登录模式
或数据库
后会有一个
触发器,由于某种原因,它会在web服务器进程尝试连接时导致错误

下面是一个如何生成错误的示例。我有一个名为
TINY
的表,其中一列最多只能接受99个值:

SQL> desc tiny; Name Null? Type ----------------------------------------- -------- ---------------------------- N NUMBER(2) 回想一下,我们的
TINY
表最多只能存储99个值。那么,
FRED
尝试连接时会发生什么

SQL> connect fred/fred ERROR: ORA-00604: error occurred at recursive SQL level 1 ORA-01438: value larger than specified precision allowed for this column ORA-06512: at line 3 在我的数据库(Oracle 11g XE beta)上,我得到以下输出:

TRIGGER_NAME OWNER ------------------------------ ------------------------------ AFTER_LOGON_ERROR_IF_FRED LUKE 触发器名称所有者 ------------------------------ ------------------------------ 登录后\u错误\u如果\u 我不相信Oracle会进行任何即时登录,如果PHP的
oci\u connect
也这样做,我会感到惊讶


我只能推测为什么错误只出现在web服务器上,而不是从bash脚本运行PHP时。可能触发器正在查询
V$SESSION
,并试图找出哪个用户帐户正试图连接到数据库?

递归SQL级别1发生的
错误消息向我表明,错误是在触发器中产生的。我猜在登录模式
或数据库
后会有一个
触发器,由于某种原因,它会在web服务器进程尝试连接时导致错误

下面是一个如何生成错误的示例。我有一个名为
TINY
的表,其中一列最多只能接受99个值:

SQL> desc tiny; Name Null? Type ----------------------------------------- -------- ---------------------------- N NUMBER(2) 回想一下,我们的
TINY
表最多只能存储99个值。那么,
FRED
尝试连接时会发生什么

SQL> connect fred/fred ERROR: ORA-00604: error occurred at recursive SQL level 1 ORA-01438: value larger than specified precision allowed for this column ORA-06512: at line 3 在我的数据库(Oracle 11g XE beta)上,我得到以下输出:

TRIGGER_NAME OWNER ------------------------------ ------------------------------ AFTER_LOGON_ERROR_IF_FRED LUKE 触发器名称所有者 ------------------------------ ------------------------------ 登录后\u错误\u如果\u 我不相信Oracle会进行任何即时登录,如果PHP的
oci\u connect
也这样做,我会感到惊讶


我只能推测为什么错误只出现在web服务器上,而不是从bash脚本运行PHP时。可能触发器正在查询
V$SESSION
并试图找出哪个用户帐户正试图连接到数据库?

ORA-01438
仅在数字列中发生。如果您试图为
varchar2
列插入一个太大的值,它将为您提供
ORA-12899:对于列
ORA-01438
而言,值太大只会发生在数字列上。如果您试图为
varchar2
列插入一个太大的值,它将为您提供
ORA-12899:对于列来说太大的值
听起来很棒!我将尝试从管理员那里获取此信息。听起来很棒!我将尝试从管理员那里获取此信息。