Come convertire da Clob a Varchar2 in Oracle
La conversione di dati in un formato stringa tra diversi tipi di dati è in genere un processo semplice in Oracle, ma alcuni casi sono un po' più impegnativi di altri. Uno di questi si verifica quando si utilizza Oracle per convertire clob in varchar2, il che è difficile perché una colonna varchar2 ha un massimo di 4.000 caratteri, mentre clob può memorizzare enormi quantità di dati sui caratteri. Puoi comunque raggiungere il tuo obiettivo, utilizzando il metodo dbms_lob substr o to_char e specificando una dimensione massima.
CLOB e VARCHAR2 spiegati
CLOB (o "clob" colloquialmente) è l'acronimo di "character large object" e può memorizzare fino a 4 GB di dati. È utilizzato da diversi sistemi di database, inclusi DB2 e Oracle. CLOB è utile quando è necessario archiviare grandi quantità di dati, ma le dimensioni stesse possono causare problemi in alcune situazioni. Questo è il motivo per cui la conversione da Oracle CLOB a un formato stringa di dimensioni più gestibili è spesso un buon approccio prima di eseguire operazioni.
Il formato VARCHAR2 memorizza quantità minori di dati, in genere fino a 4.000 byte, a meno che non si utilizzi una dimensione massima di stringa estesa, nel qual caso può arrivare fino a 32.767 byte. Per un set di caratteri a byte singolo, in genere puoi ottenere fino a 4.000 caratteri in una colonna. La discrepanza tra le dimensioni massime di questi due formati di dati è dove sorgono i problemi durante la conversione.
Il metodo dbms_lob substr
Per convertire una stringa clob in varchar2, apri il tuo programma SQL *Plus. La sintassi per la conversione che devi eseguire è:
SELECT dbms_lob.substr( clob_column, for_how_many_bytes, from_which_byte ) DA tabella
Qui i valori tra parentesi sono quelli che devi cambiare, così come "tabella" alla fine. Questi corrispondono alla colonna ("clob_column") e alla tabella con cui stai lavorando. "for_how_many_bytes" ti dà l'opportunità di specificare quanti byte di dati vuoi convertire e "from_which_byte" ti permette di specificare un punto di partenza.
Quindi, se hai una tabella chiamata "taxes" e un campo chiamato "net_pay" e supponendo che tu voglia 4.000 byte a partire dal primo, dovresti inserire:
SELECT dbms_lob.substr(net_pay, 4000, 1) DA tasse
Per convertire la stringa nel formato varchar2.
Il metodo TO_CHAR
Puoi anche usare il comando TO_CHAR con una sintassi molto simile per raggiungere lo stesso obiettivo:
SELECT TO_CHAR(SUBSTR (clob_column,0,3999)) FROM tabella
Qui, i byte di inizio e fine sono specificati come 0 e 3999 (per una stringa di 4.000 caratteri a partire dall'inizio), ma i campi "clob_column" e "table" vengono utilizzati esattamente nello stesso modo di prima. Quindi, nello stesso esempio, potresti inserire:
SELECT TO_CHAR(SUBSTR (net_pay,0,3999)) FROM tasse
Fondamentalmente, anziché completare il processo in un unico passaggio, utilizza il comando SUBSTR per estrarre una sottostringa dalla stringa più grande, quindi utilizza "to_char" per gestire la conversione. Se la colonna clob in questione ha meno di 4.000 byte di informazioni, puoi inserire il nome della colonna tra parentesi dopo to_char invece di specificare una sottostringa.