Ошибка 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);
Другие вопросы по тегам