我创建了下表
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)"
7条答案
按热度按时间uqdfh47h1#
告诉你错误是什么。地址最多可以容纳20个字符,你传递的是25个字符。
m3eecexj2#
如前所述,错误消息显示了确切的问题:您正在将25个字符传递到设置为容纳20个字符的字段中。您可能还需要考虑更精确地定义列。您可以定义VARCHAR2列是否将存储特定数量的字节或字符。将来尝试将多字节字符插入到字段中时可能会遇到问题,例如,这是5个字符的长度,但它不适合5个字节:"热汤"
下面是一个例子:
或
slwdgvem3#
这个答案仍然出现在ORA-12899的列表中,上面还有很多没有帮助的评论,即使它们很旧。最有帮助的评论是#4,对于任何试图找出为什么在加载数据时会出现这个问题的专业人士来说。
有些字符的长度超过1个字节,特别是在SQL Server上,SQL Server中的varchar(20)可能适合的字符在Oracle中的varchar 2(20)中可能不适合。
我昨天在SSIS用Attunity驱动程序加载Oracle数据库时遇到了这个错误,我想我可以为人们节省一些时间。
cgfeq70w4#
在我的例子中,我将
C# OracleCommand
与OracleParameter
一起使用,并将Size
属性的所有参数设置为每列的最大长度,然后错误就解决了。db2dz4w85#
我只是想在这里分享从谷歌的顶部结果...
我尝试添加这样的虚拟列
甲骨文抱怨道:
问题是,我的
code
列是varchar2(120)
,所以substr
最多120个字符。创建临时表时,可以发现:
和
desc
返回一旦我意识到,解决方案是使用
export_code varchar2(120 char)
或执行转换:xmakbtuz6#
示例:1和2表可用
1表删除条目并选择nor 2表记录并插入到no 1表。当删除时间no 1表没有第二个表记录示例emp id不可用意味着出现此错误
goqiplq27#
试试这个: