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

Dlaczego Oracle varchar2 ma obowiązkowy rozmiar jako parametr definicji?

Nie, to wcale nie to samo.

  1. Długość kolumny to przydatne metadane dla programistów tworzących ekrany.
  2. Podobnie automatyczne narzędzia zapytań, takie jak TOAD i SQL Developer, używają długości kolumny podczas renderowania wyników.
  3. Baza danych używa długości zmiennej podczas przydzielania pamięci dla kolekcji PL/SQL. Ponieważ ta pamięć wychodzi z PGA nadmiernie, deklaracja zmiennej może prowadzić do awarii programów, ponieważ serwerowi zabrakło pamięci.
  4. Istnieją podobne problemy z deklaracją pojedynczych zmiennych w programach PL/SQL, po prostu kolekcje mają tendencję do zwielokrotniania problemu.
  5. Kolumny o dużych rozmiarach stwarzają problemy dla indeksów złożonych. Poniżej znajduje się baza danych z blokami 8K

....

SQL> create table t23 (col1 varchar2(4000), col2 varchar2(4000))
  2  /

Table created.

SQL> create index t23_i on t23(col1,col2)
  2  /
create index t23_i on t23(col1,col2)
                      *
ERROR at line 1:
ORA-01450: maximum key length (6398) exceeded


SQL>

Ale przede wszystkim rozmiary kolumn są formą sprawdzania błędów. Jeśli kolumna ma mieć dziesięć znaków, a jakiś autonomiczny proces próbuje wczytać tysiąc znaków, to coś jest nie tak. Proces powinien się nie powieść, więc możemy zbadać, dlaczego ładujemy duff dane. Alternatywą jest baza danych pełna śmieci, a jeśli tego właśnie chcieliśmy, powinniśmy dać wszystkim Excel i zrobić z nim.

Prawdą jest, że zmiana rozmiaru kolumny, gdy okaże się, że nie doceniliśmy, może być męcząca. Ale nie zdarza się to zbyt często i możemy złagodzić wiele problemów, używając deklaracji %TYPE i SUBTYPE w naszym PL/SQL zamiast zapisywania długości zmiennych na stałe.

Liczby są różne. Po pierwsze, maksymalny rozmiar liczby jest znacznie mniejszy niż odpowiednik tekstowy (38 cyfr gwarantowanej precyzji).

Ale kluczowa różnica polega na tym, że Oracle przechowuje wartości liczbowe w notacja naukowa więc nie ma bezpośredniego związku między arytmetycznym rozmiarem liczby a zajmowaną przez nią przestrzenią dyskową.

SQL> select vsize(123456789012345678901) n1
  2         , vsize(999999999999999999999999999999) n2
  3         , vsize(0.000000000000000000001) n3
  4         , vsize(1000000000000000000000000) n4
  5  from dual
  6  /

        N1         N2         N3         N4
---------- ---------- ---------- ----------
        12         16          2          2

SQL> 

Niemniej jednak dobrą praktyką jest określanie skali i precyzji tam, gdzie to możliwe, zwłaszcza gdy mamy do czynienia z liczbami całkowitymi, powiedzmy lub pieniędzmi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Eksport SQL*Plus CSV wolniej niż SQL Developer

  2. Jak edytować obiekty BLOB (zawierające JSON) w Oracle SQL Developer?

  3. Formatowanie ciągów za pomocą LITAGG w Oracle. Wyłączenie pojedynczego cudzysłowu ` ' `

  4. Utwórz indeks na istniejącej tabeli Oracle

  5. pojawia się błąd podczas tworzenia tabeli jako ORA-00904::nieprawidłowy identyfikator w bazie danych Oracle sql