Hlavní navigace

Názor k článku Jak nepoužívat PL/pgSQL (případně PL/SQL) – fatální chyby při vývoji od Karel - Oracle má také jednu extra vrstvu legrace ve...

Článek je starý, nové názory již nelze přidávat.

  • 23. 5. 2018 12:54

    Karel (neregistrovaný) ---.cust.nbox.cz

    Oracle má také jednu extra vrstvu legrace ve chvíli, kdy se nastaví, že je case-insensitive. On stále v datech bude mít mix velkých a malých písmen. Pokud se pak objeví podmínka " WHERE X = 'Pepa' ", tak se stanou dvě věci:

    1. Oracle vypočítá hodnotu pro 'Pepa': HEXTORAW('7065706­100')
    2. Nebude pracovat se slupcem X, ale s touhle funkcí: NLSSORT("X" , 'nls_sort=''BI­NARY_CI''')

    Výkon půjde okamžitě do kolen, přestože si datový typ plně odpovídá. Řešením je udělat si index s tou funkcí NLSSORT. Bohužel to platí i pro JOIN - nedělá se přes sloupce, ale přes ty NLSSORT funkce. Dokud je v obou tabulkách index s funkcí, tak to funguje dobře. Jakmile chybí, tak je problém.

    Přidejte fakt, že case (in)sensitive je parametr session, nikoliv instance, a legrace se násobí!