Převod dat v řetězcovém formátu mezi různými datovými typy je v Oracle obvykle přímočarý proces, ale některé případy jsou o něco náročnější než jiné. K jednomu z nich dochází, když používáte Oracle k převodu clob na varchar2, což je obtížné, protože a Sloupec varchar2 má maximálně 4 000 znaků, zatímco clob může uložit obrovské množství znaků data. Stále však můžete dosáhnout svého cíle pomocí metody dbms_lob substr nebo to_char a zadáním maximální velikosti.
Vysvětlení CLOB a VARCHAR2
CLOB (nebo hovorově "clob") je zkratka pro "character large object" a může uložit až 4 GB dat. Používá jej několik databázových systémů, včetně DB2 a Oracle. CLOB je užitečný, když potřebujete uložit velké množství dat, ale samotná velikost může v některých situacích způsobit problémy. To je důvod, proč je převod z Oracle CLOB do řetězcového formátu lépe spravovatelné velikosti často dobrým přístupem před prováděním operací.
Video dne
Formát VARCHAR2 ukládá menší množství dat, obvykle do 4 000 bajtů, pokud nepoužijete rozšířenou maximální velikost řetězce, v takovém případě může dosahovat až 32 767 bajtů. U jednobajtové znakové sady můžete obvykle získat až 4 000 znaků ve sloupci. Rozdíl mezi maximálními velikostmi těchto dvou datových formátů je místo, kde vznikají problémy při převodu.
Metoda dbms_lob substr
Chcete-li převést řetězec clob na varchar2, otevřete svůj program SQL *Plus. Syntaxe převodu, který musíte provést, je:
SELECT dbms_lob.substr( sloupec_klobů, pro_jak_mnoho_bajtů, z_kterého_bytu ) tabulka FROM
Zde jsou hodnoty v závorkách ty, které musíte změnit, stejně jako "tabulka" na konci. Ty odpovídají sloupci ("clob_column") a tabulce, se kterou pracujete. "for_how_many_bytes" vám dává příležitost určit, kolik bajtů dat chcete převést, a "from_which_byte" vám umožňuje určit počáteční bod.
Pokud tedy máte tabulku s názvem „daně“ a pole s názvem „net_pay“ a za předpokladu, že chcete 4 000 bajtů počínaje prvním, zadáte:
SELECT dbms_lob.substr (net_pay, 4000, 1) FROM daní
Chcete-li převést řetězec do formátu varchar2.
Metoda TO_CHAR
K dosažení stejného cíle můžete také použít příkaz TO_CHAR s velmi podobnou syntaxí:
SELECT TO_CHAR(SUBSTR (sloupec_clob, 0,3999)) FROM tabulka
Zde jsou počáteční a koncové bajty zadány jako 0 a 3999 (pro řetězec 4 000 znaků začínající od začátku), ale pole "clob_column" a "table" se používají přesně stejným způsobem jako před. Takže ve stejném příkladu můžete zadat:
SELECT TO_CHAR(SUBSTR (net_pay, 0,3999)) FROM daní
V zásadě, spíše než dokončení procesu v jediném kroku, to používá příkaz SUBSTR k vytažení podřetězce z většího řetězce a poté použije "to_char" ke zpracování převodu. Pokud má dotyčný sloupec clob méně než 4 000 bajtů informací, můžete místo zadání podřetězce zadat název sloupce do závorek za to_char.