oracle SQL错误:ORA-12899:列的值太大

h22fl7wq  于 2023-01-01  发布在  Oracle
关注(0)|答案(7)|浏览(799)

我创建了下表

CREATE TABLE Customers(
  CustomerID varchar2(9) PRIMARY KEY, 
  Customer_Contact varchar2(40) NOT NULL, 
  Address varchar2(20) NOT NULL,
  Post_Code varchar2(7) NOT NULL, 
  Telephone_Number varchar2(11) NOT NULL)

我目前正尝试使用INSERT VALUES语句。

INSERT INTO Customers VALUES(
  501623129, 
  'John Petterson', 
  '-- Singleton Close London', 
  '--- ---', 02082860222)

当我尝试运行该语句时,它给出了以下错误消息。
从命令的第4行开始出错:插入客户值(501623129、"David Patterson"、"伦敦30号单例关闭"、"SW17 9JY"、02082860642)错误报告:SQL错误:ORA-12899:列"DJ"."CUSTOMERS"."ADDRESS"的值太大(实际值:25,最大值:20)12899. 00000-"列% s的值太大(实际值:% s,最大值:% s)"

uqdfh47h

uqdfh47h1#

ORA-12899: value too large for column "DJ"."CUSTOMERS"."ADDRESS" (actual: 25, maximum: 2

告诉你错误是什么。地址最多可以容纳20个字符,你传递的是25个字符。

m3eecexj

m3eecexj2#

如前所述,错误消息显示了确切的问题:您正在将25个字符传递到设置为容纳20个字符的字段中。您可能还需要考虑更精确地定义列。您可以定义VARCHAR2列是否将存储特定数量的字节或字符。将来尝试将多字节字符插入到字段中时可能会遇到问题,例如,这是5个字符的长度,但它不适合5个字节:"热汤"
下面是一个例子:

CREATE TABLE Customers(CustomerID  VARCHAR2(9 BYTE), ...

CREATE TABLE Customers(CustomerID  VARCHAR2(9 CHAR), ...
slwdgvem

slwdgvem3#

这个答案仍然出现在ORA-12899的列表中,上面还有很多没有帮助的评论,即使它们很旧。最有帮助的评论是#4,对于任何试图找出为什么在加载数据时会出现这个问题的专业人士来说。
有些字符的长度超过1个字节,特别是在SQL Server上,SQL Server中的varchar(20)可能适合的字符在Oracle中的varchar 2(20)中可能不适合。
我昨天在SSIS用Attunity驱动程序加载Oracle数据库时遇到了这个错误,我想我可以为人们节省一些时间。

cgfeq70w

cgfeq70w4#

在我的例子中,我将C# OracleCommandOracleParameter一起使用,并将Size属性的所有参数设置为每列的最大长度,然后错误就解决了。

OracleParameter parm1 = new OracleParameter();
param1.OracleDbType = OracleDbType.Varchar2;
param1.Value = "test1";
param1.Size = 8;

OracleParameter parm2 = new OracleParameter();
param2.OracleDbType = OracleDbType.Varchar2;
param2.Value = "test1";
param2.Size = 12;
db2dz4w8

db2dz4w85#

我只是想在这里分享从谷歌的顶部结果...
我尝试添加这样的虚拟列

alter table t1 add (
    export_code varchar2(3 char) as (case when country is null then code else substr(code, 3) end) virtual
);

甲骨文抱怨道:

ORA-12899: value too large for column "EXPORT_CODE" (actual: 12, maximum: 480)

问题是,我的code列是varchar2(120),所以substr最多120个字符。
创建临时表时,可以发现:

create table t2 as
    select case when country is null then code else substr(code, 3) end as export_code from t1;

desc返回

Name        Null? Type          
----------- ----- ------------- 
EXPORT_CODE       VARCHAR2(120)

一旦我意识到,解决方案是使用export_code varchar2(120 char)或执行转换:

alter table t1 add (
  export_code varchar2(3 char) as ( cast (case when country is null then code else substr(code, 3) end as varchar2(3 char) ) ) virtual
);
xmakbtuz

xmakbtuz6#

示例:1和2表可用
1表删除条目并选择nor 2表记录并插入到no 1表。当删除时间no 1表没有第二个表记录示例emp id不可用意味着出现此错误

goqiplq2

goqiplq27#

试试这个:

insert into CUSROMER_POST (CUS_NUM_BOX,CUS_NAE3_CUSTOMER,CUS_NAME,CUS_ID_OFFICE,CUS_DAET,CUS_MOLAHADA,CUS_PHON,CUS_EMIL,CUS_ADDRES) values (:P8_CUS_NUM_BOX,:P8_CUS_NAE3_CUSTOMER,:P8_CUS_NAME,:P8_CUS_ID_OFFICE,:P8_CUS_DAET,:P8_CUS_MOLAHADA,:P8_CUS_PHON,:P8_CUS_EMIL,:P8_CUS_ADDRES);

相关问题