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

Kolumna zapytań z typem danych char w oracle

Problem sprowadza się do tego, czy używasz char lub varchar2 semantyka porównawcza w zapytaniach. Jeśli masz zakodowany na stałe literał ciągu lub char(10) zmienna Oracle używa char semantyki porównania, które mają ignorować końcowe białe znaki. Jeśli masz varchar2(10) zmienna Oracle używa varchar2 semantyka porównania, która obejmuje końcowe białe znaki. Tak więc

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

zwróci wiersz, jeśli v_aa jest zdefiniowany jako char(10) (lub jeśli jest zastąpiony literałem ciągu), ale nie, jeśli jest zdefiniowany jako varchar(10) .

Jest to jeden z (wielu) powodów, dla których większość ludzi unika char typy danych całkowicie. Osobiście nie przeszkadza mi okazjonalny char dla danych o naprawdę stałej szerokości (np. char(1) dla flag i char(2) dla kodów stanów), nawet jeśli nie ma żadnych korzyści z używania char ponad varchar2 w tych scenariuszach. Jednak dla wszystkiego, co nie ma stałej szerokości, użyj char nie ma sensu. Po prostu zmuszasz Oracle do zajmowania większej ilości miejsca niż to konieczne i tworzenia większej ilości pracy dla siebie, radzenia sobie z dwoma zestawami semantyki porównywania ciągów (między innymi problemami).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uruchom exe z DBMS_SCHEDULER

  2. Jak przekonwertować wiersze na kolumny w Oracle SQL

  3. Błąd:PLS-00428:w tej instrukcji oczekiwana jest klauzula into

  4. Błąd Oracle ORA-28759:nie udało się otworzyć pliku podczas żądania pakietu utl_http

  5. Jak mogę użyć FOR UPDATE z JOIN w Oracle?