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

Защо Oracle varchar2 има задължителен размер като дефиниционен параметър?

Не, изобщо не е същото.

  1. Дължината на колоната е полезна метаданна за разработчиците, които създават екрани.
  2. По същия начин автоматичните инструменти за заявки като TOAD и SQL Developer използват дължината на колоната, когато изобразяват резултати.
  3. Базата данни използва дължината на променлива, когато разпределя памет за PL/SQL колекции. Тъй като тази памет излиза от PGA supersizing, декларацията на променливата може да доведе до неизправност на програмите, защото паметта на сървъра е изчерпана.
  4. Има подобни проблеми с декларирането на единични променливи в PL/SQL програмите, просто колекциите са склонни да умножават проблема.
  5. Колоните с големи размери създават проблеми за съставните индекси. Следното е в база данни с 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>

Но преди всичко, размерите на колоните са форма на проверка на грешки. Ако колоната трябва да е дълга десет знака и някакъв автономен процес се опитва да зареди хиляда знака, значи нещо не е наред. Процесът трябва да се провали, така че можем да проучим защо зареждаме duff данни. Алтернативата е база данни, пълна с боклук, и ако това е, което искахме, трябваше просто да дадем на всички Excel и да приключим с него.

Вярно е, че промяната на размера на колоната, когато се окаже, че сме подценили, може да бъде уморителна. Но това не се случва много често и можем да смекчим голяма част от болката, като използваме %TYPE и SUBTYPE декларации в нашия PL/SQL вместо твърдо кодиране на променливи дължини.

Числата са различни. Като начало максималният размер на число е много по-малък от текстовия еквивалент (38 цифри с гарантирана точност).

Но основната разлика е, че Oracle съхранява числови стойности в научна нотация така че няма пряка връзка между аритметичния размер на числото и пространството за съхранение, което то заема.

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> 

Въпреки това остава добра практика да се уточнят мащаб и точност, когато е възможно, особено когато имаме работа с цели числа, да речем, или пари.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Редовен израз на конкретен формат на датата

  2. Промяна на типа данни в Oracle без изтриване на данните

  3. Когато извикам PreparedStatement.cancel() в JDBC приложение, наистина ли го убива в база данни на Oracle?

  4. Как да използвате клауза за групово събиране с оператор SELECT INTO в базата данни на Oracle

  5. Как да извикате пореден номер на база данни на Oracle с помощта на MyBatis?