sql >> Databáze >  >> RDS >> Oracle

Sloupec dotazu s datovým typem char v oracle

Problém spočívá v tom, zda používáte char nebo varchar2 srovnání sémantiky ve vašich dotazech. Pokud máte pevně zakódovaný řetězcový literál nebo char(10) Oracle používá proměnnou char sémantika porovnání, která má ignorovat koncové prázdné místo. Pokud máte varchar2(10) Oracle používá proměnnou varchar2 sémantika porovnání, která zahrnuje koncové prázdné místo. Tedy

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

vrátí řádek, pokud v_aa je definován jako char(10) (nebo pokud je nahrazen řetězcovým literálem), ale ne, pokud je definován jako varchar(10) .

Toto je jeden z (mnoha) důvodů, proč se většina lidí vyhýbá char datové typy úplně. Osobně mi občasné char nevadí pro data skutečně s pevnou šířkou (tj. char(1) pro příznaky a char(2) pro stavové kódy), i když použití char nemá žádnou výhodu přes varchar2 v těch scénářích. Pro vše, co nemá pevnou šířku, však pomocí char nedává to smysl. Jen nutíte Oracle, aby spotřeboval více místa, než potřebuje, a vytváříte pro sebe více práce se dvěma sadami sémantiky porovnávání řetězců (mimo jiné).



  1. Výkon Oracle CLOB

  2. nelze zvýšit limit otevřených souborů v mariadb 10 na centos7

  3. připojení mysql z jiné domény

  4. Jak zachytit výstup DBCC-Statement v temptable