Php OCI_CONNECT是否会导致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中解决这个问题 你知道这个错误的原因是什么吗 更新 oracle是否会自动在某个地方进行一些日志记录,而不进行专门的配置?我可以让oracle或PHP告诉我哪个表或列受到影响吗 更新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中
我发现,当我在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:对于列来说太大的值
听起来很棒!我将尝试从管理员那里获取此信息。听起来很棒!我将尝试从管理员那里获取此信息。