Oracle
 sql >> база данни >  >> RDS >> Oracle

Конкатенирането на числа в израз на виртуална колона хвърля ORA-12899:стойността е твърде голяма за колона

Вашите номера не са ограничени. С едноцифрени (положителни) числа ти знайте, че свързаната дължина може да бъде само три, но виртуалната колона трябва да е достатъчно голяма за всяко число - така че изглежда, че позволява до 40 цифри за имплицитния формат на модела (38 значещи цифри, десетичен разделител и знак; лексикализацията на @collspar ).

Като каза това, ограничаването на числовата колона няма да бъде отразено в дължината на виртуалната колона - правейки и двете колони NUMBER(1,0) все още оставя конкатенацията, изискваща 81 знака. Вземането на подниза на генерираната стойност също няма да работи , в този случай получавайки ORA-12899: value too large for column "TEXT" (actual: 10, maximum: 40) . Предоставяне на модел на формат за всеки to_char() обаждане, напр. от FM999 ), ще работи, но ограничава стойностите от двете страни на долната черта, а не цялата дължина директно.

Ако искате да ограничите размера на колоната, можете да я прехвърлите към същия тип данни и размер, което е по-ясно:

text VARCHAR2(10) generated always as 
    (cast(to_char(id)||'_'||to_char(num) as VARCHAR2(10))) VIRTUAL



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да свържете база данни на Oracle от PHP

  2. Как да изберете данни, които не съвпадат в друга колона

  3. ODP.NET Oracle.ManagedDataAcess произволни грешки ORA-12570

  4. C#:Обектът не може да бъде прехвърлен от DbNull към други типове

  5. Как да добавите низ към клаузата where в APEX Interactive Report SQL