我创建了下表
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行开始出错: 插入客户 VALUES(501623129,'David Patterson', '30 Singleton Close London','SW17 9JY',02082860642)错误报告:SQL 错误:ORA-12899:值太大了 专栏“DJ”。“CUSTOMERS”。“ADDRESS” (实际:25,最大:20) 12899. 00000 - “列%s的值太大(实际:%s,最大值:%s)”
答案 0 :(得分:18)
ORA-12899: value too large for column "DJ"."CUSTOMERS"."ADDRESS" (actual: 25, maximum: 2
告诉你错误是什么。地址最多可以包含20个字符,您传递25个字符。
答案 1 :(得分:8)
如上所述,错误消息显示确切的问题:您将25个字符传递到设置为20的字段中。您可能还需要考虑更精确地定义列。您可以定义VARCHAR2列是否存储一定数量的字节或字符。在将来尝试在字段中插入多字节字符时可能会遇到问题,例如,这个字符长度为5个字符,但不适合5个字节:'ÀÈÌÕÛ'
以下是一个例子:
CREATE TABLE Customers(CustomerID VARCHAR2(9 BYTE), ...
或
CREATE TABLE Customers(CustomerID VARCHAR2(9 CHAR), ...
答案 2 :(得分:2)
这个答案在ORA-12899的清单中仍然很高,以及上面的许多非有用的评论,即使它们已经过时了。最有帮助的评论是#4,任何专业人士试图找出他们在加载数据时得到这个的原因。
某些字符的长度超过1个字节,尤其是在SQL Server上。可能适合SQLServer中的varchar(20)的东西不适合Oracle中类似的varchar2(20)。
昨天我遇到了这个错误,SSIS加载了一个带有Attunity驱动程序的Oracle数据库,并且认为我会节省一些时间。
答案 3 :(得分:0)
在我的情况下,我将C# OracleCommand
与OracleParameter
一起使用,并将所有参数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;
答案 4 :(得分:0)
我只是想在这里分享 Google 的最佳结果...
我试图添加这样的虚拟列
alter table t1 add (
export_code varchar2(3 char) as (case when country is null then code else substr(code, 3) end) virtual
);
然后 oracle 抱怨:
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
);
答案 5 :(得分:-2)
示例:1和2表可用
1表删除条目并选择也不是2个表记录并插入到没有1个表。当删除时间没有1表没有第二个表记录示例emp id不可用意味着出现此错误