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

Колона на заявка с тип данни char в Oracle

Проблемът се свежда до това дали използвате char или varchar2 сравнителна семантика във вашите заявки. Ако имате твърдо кодиран низов литерал или char(10) променлива, Oracle използва char сравнителна семантика, която трябва да игнорира празното пространство в края. Ако имате varchar2(10) променлива, Oracle използва varchar2 сравнителна семантика, която включва празното пространство в края. Така

 select aa 
   into v_temp 
   from abc 
  where aa in (v_aa);

ще върне ред, ако v_aa се дефинира като char(10) (или ако е заменен с низов литерал), но не и ако е дефиниран като varchar(10) .

Това е една от (многото) причини повечето хора да избягват char типове данни изцяло. Лично аз нямам нищо против случайния char за данни с наистина фиксирана ширина (т.е. char(1) за флагове и char(2) за кодове на състояние), въпреки че няма полза от използването на char над varchar2 в тези сценарии. За всичко, което не е с фиксирана ширина обаче, използвайте char няма смисъл. Вие просто принуждавате Oracle да заема повече място от необходимото и създавате повече работа за себе си, като се занимавате с два набора семантика за сравнение на низове (наред с други проблеми).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вмъкнете групови записи в отдалечена база данни (dblink) с помощта на Bulk Collect

  2. Оператор за неравенство на Oracle:¬=

  3. Грешка при изпълнението на извикване на ODCIEXTTABLEOPEN

  4. Намерете липсващи данни, предадени на SQL в клаузата

  5. R рамка с данни към Oracle SQL таблица:Не може да се разпредели памет