Oracle SQL错误:ORA-01401:插入的值对于列太大

Oracle SQL错误:ORA-01401:插入的值对于列太大,oracle,oracle10g,Oracle,Oracle10g,我在Oracle数据库中向表插入新记录时遇到问题。错误描述说- SQL错误:ORA-01401:插入的值对于列太大 当我在表中有60列时,我如何知道哪个列的值较大 SQL错误:ORA-01401:插入的值对于列太大 您正在尝试为列插入大于指定大小的值 当我在表中有60列时,我如何知道哪个列的值较大 错误肯定会包含插入的实际大小和允许的最大大小的表名和列名 比如说, SQL> CREATE TABLE t(A VARCHAR2(2)); Table created. SQL> SQ

我在Oracle数据库中向表插入新记录时遇到问题。错误描述说-

SQL错误:ORA-01401:插入的值对于列太大

当我在表中有60列时,我如何知道哪个列的值较大

SQL错误:ORA-01401:插入的值对于列太大

您正在尝试为列插入大于指定大小的值

当我在表中有60列时,我如何知道哪个列的值较大

错误肯定会包含插入的实际大小和允许的最大大小的表名和列名

比如说,

SQL> CREATE TABLE t(A VARCHAR2(2));

Table created.

SQL>
SQL> INSERT INTO t VALUES ('123');
INSERT INTO t VALUES ('123')
                      *
ERROR at line 1:
ORA-12899: value too large for column "LALIT"."T"."A" (actual: 3, maximum: 2)


SQL>
SQL> CREATE TABLE t(A number(2));

Table created.

SQL>
SQL> INSERT INTO t VALUES (123);
INSERT INTO t VALUES (123)
                      *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column


SQL>
在上面的示例中,错误清楚地说明了“column”LALIT.“T.“A”(实际值:3,最大值:2)“其中LALIT
模式
T
A
。创建表时为列A指定的大小为2,但实际插入的大小为3

更新关于
ORA-01401
ORA-12899
之间的混淆

从Oracle 10g及更高版本中,
ORA-01401
被修改为
ORA-12899
,该版本更为明确,包含导致错误的架构、表和列的详细信息

其他信息以防有人感兴趣:

有一个对应的
ORA-01401
,即
ORA-01438
,适用于数字的情况。这似乎没有改变

比如说,

SQL> CREATE TABLE t(A VARCHAR2(2));

Table created.

SQL>
SQL> INSERT INTO t VALUES ('123');
INSERT INTO t VALUES ('123')
                      *
ERROR at line 1:
ORA-12899: value too large for column "LALIT"."T"."A" (actual: 3, maximum: 2)


SQL>
SQL> CREATE TABLE t(A number(2));

Table created.

SQL>
SQL> INSERT INTO t VALUES (123);
INSERT INTO t VALUES (123)
                      *
ERROR at line 1:
ORA-01438: value larger than specified precision allowed for this column


SQL>

你能告诉我们你数据库的版本吗?您将其标记为10g,但它似乎是9i,因为ora 01401在10g中被ora 12899替换,这在@Lalit的回答中提到。在10g中,列名称包含在err msg中。请参见我对问题的上述评论,ORA-12899是在10g中引入的。是的,我看到了
oracle10g
标签。OP应该在错误堆栈中看到错误消息。。。。除非他把版本弄混了。很可能是的。谢谢你提起这件事。我检查了MOS,想添加一个更新。请参阅我的最新答案。它应该消除任何混乱。