sql >> Databasteknik >  >> RDS >> Oracle

Fråga kolumn med char datatyp i oracle

Problemet beror på om du använder char eller varchar2 jämförelsesemantik i dina frågor. Om du har en hårdkodad sträng literal eller en char(10) variabel, Oracle använder char jämförelsesemantik som ska ignorera det efterföljande vita utrymmet. Om du har en varchar2(10) variabel, Oracle använder varchar2 jämförelsesemantik som inkluderar det efterföljande vita utrymmet. Alltså

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

returnerar en rad om v_aa definieras som en char(10) (eller om den ersätts med en bokstavlig sträng) men inte om den är definierad som en varchar(10) .

Detta är en av (många) anledningarna till att de flesta undviker char datatyper helt och hållet. Personligen har jag inget emot en och annan char för data med verkligt fast bredd (dvs. char(1) för flaggor och char(2) för tillståndskoder) även om det inte finns någon fördel med att använda char över varchar2 i de scenarierna. För allt som inte är fast bredd, dock med en char är meningslöst. Du tvingar bara Oracle att konsumera mer utrymme än det behöver och skapar mer arbete för dig själv genom att hantera två uppsättningar av strängjämförelsesemantik (bland andra frågor).



  1. CROSS JOIN vs INNER JOIN i SQL

  2. Standardparameter i Oracle-proceduren

  3. Behöver endast välja data som innehåller snedstreck i MySQL

  4. Oracle SQL Statement för unik tidsstämpel för varje rad