Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Łączenie liczb w wyrażeniu kolumny wirtualnej powoduje wyświetlenie ORA-12899:wartość za duża dla kolumny

Twoje liczby nie są ograniczone. Z jednocyfrowymi (dodatnimi) liczbami ty wiem, że połączona długość może wynosić tylko trzy, ale wirtualna kolumna musi być wystarczająco duża dla dowolnej liczby - więc wygląda na to, że dopuszcza do 40 cyfr dla niejawnego modelu formatu (38 cyfr znaczących, separator dziesiętny i znak; leksykalizacja @collspar ).

To powiedziawszy, ograniczenie kolumny liczbowej nie będzie odzwierciedlone w długości wirtualnej kolumny — obie kolumny będą NUMBER(1,0) nadal pozostawia konkatenację wymagającą 81 znaków. Pobranie podłańcucha wygenerowanej wartości także nie zadziała , w tym przypadku pobranie ORA-12899: value too large for column "TEXT" (actual: 10, maximum: 40) . Dostarczanie modelu formatu dla każdej to_char() zadzwoń np. z FM999 ), zadziała, ale ogranicza wartości po obu stronach podkreślenia, a nie bezpośrednio w całkowitej długości.

Jeśli chcesz ograniczyć rozmiar kolumny, możesz rzutować ją na ten sam typ i rozmiar danych, co jest bardziej jednoznaczne:

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. skuteczny sposób na sprawdzenie, czy istnieje wiersz tabeli

  2. Znaleziono nieznany symbol diagramu relacyjnego w programie Oracle SQL Developer

  3. funkcja agregująca Oracle sql z wartościami domyślnymi

  4. jak stworzyć procedurę składowaną w oracle, która akceptuje tablicę parametrów

  5. Jak sprawdzić, czy wartość kolumny została jawnie określona w wyzwalaczu PL/SQL PRZED UPDATE?