Ошибка SQL: ORA-12899: слишком большое значение для столбца
Я создал следующую таблицу
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 в команде: INSERT INTO Customer VALUES(501623129, 'David Patterson', '30 Singleton Close London', 'SW17 9JY', 02082860642) Отчет об ошибке: Ошибка SQL: ORA-12899: слишком большое значение для столбца "DJ"."CUSTOMERS"."ADDRESS" (фактическое: 25, максимальное: 20) 12899. 00000 - " слишком большое значение для столбца%s (фактическое: %s, максимальное: %s)"
7 ответов
ORA-12899: value too large for column "DJ"."CUSTOMERS"."ADDRESS" (actual: 25, maximum: 2
Говорит вам, в чем ошибка. Адрес может содержать не более 20 символов, вы передаете 25 символов.
Как уже упоминалось, сообщение об ошибке показывает вам точную проблему: вы передаете 25 символов в поле, настроенное для хранения 20. Возможно, вы также захотите немного более точно определить столбцы. Вы можете определить, будет ли столбец VARCHAR2 хранить определенное количество байтов или символов. В будущем вы можете столкнуться с проблемой, когда вы попытаетесь вставить многобайтовый символ в поле, например, его длина составляет 5 символов, но он не помещается в 5 байтов: 'ÀÈÌÕÛ'
Вот пример:
CREATE TABLE Customers(CustomerID VARCHAR2(9 BYTE), ...
или же
CREATE TABLE Customers(CustomerID VARCHAR2(9 CHAR), ...
Этот ответ по-прежнему занимает высокое место в списке для ORA-12899 и содержит множество бесполезных комментариев выше, даже если они старые. Самый полезный комментарий был #4 для любого профессионала, пытающегося выяснить, почему они получают это при загрузке данных.
Некоторые символы имеют длину более 1 байта, особенно это касается SQL Server. И то, что может поместиться в varchar(20) в SQLServer, не будет вписываться в аналогичный varchar2(20) в Oracle.
Вчера я столкнулся с этой ошибкой, когда SSIS загружал базу данных Oracle с драйверами Attunity, и подумал, что смогу сэкономить время.
В моем случае я использую 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;
Я просто хотел поделиться здесь топом результатов от Google...
Я пытался добавить такой виртуальный столбец
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
);
Пример: 1 и 2 таблица доступна
1 таблицу удалите запись и выберите ни 2 таблицы таблицы и вставьте в 1 таблицу. когда время удаления нет 1 таблицы не имеют записей второй таблицы пример emp id недоступен означает, что эти ошибки появились
Попробуй это:
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);