Konvertering af data i et strengformat mellem forskellige datatyper er normalt en ligetil proces i Oracle, men nogle tilfælde er lidt mere udfordrende end andre. En af disse opstår, når du bruger Oracle til at konvertere clob til varchar2, hvilket er svært, fordi en varchar2 kolonne har et maksimum på 4.000 tegn, mens clob kan gemme enorme mængder tegn data. Du kan dog stadig nå dit mål ved at bruge enten dbms_lob substr-metoden eller to_char og angive en maksimal størrelse.
CLOB og VARCHAR2 Forklaret
CLOB (eller "klob" i daglig tale) er et akronym for "karakter stort objekt", og det kan gemme op til 4 GB data. Det bruges af flere databasesystemer, herunder DB2 og Oracle. CLOB er nyttig, når du skal gemme store mængder data, men selve størrelsen kan give problemer i nogle situationer. Dette er grunden til, at konvertering fra en Oracle CLOB til et strengformat af en mere overskuelig størrelse ofte er en god tilgang, før du udfører operationer.
Dagens video
VARCHAR2-formatet gemmer mindre mængder data, normalt op til 4.000 bytes, medmindre du bruger en udvidet maksimal strengstørrelse, i hvilket tilfælde det kan gå op til 32.767 bytes. For et enkelt-byte tegnsæt kan du normalt få op til 4.000 tegn i en kolonne. Uoverensstemmelsen mellem de maksimale størrelser af disse to dataformater er, hvor problemerne opstår under konverteringen.
Metoden dbms_lob substr
For at konvertere en clob-streng til varchar2 skal du åbne dit SQL *Plus-program. Syntaksen for den konvertering, du skal udføre, er:
VÆLG dbms_lob.substr( clob_column, for_how_many_bytes, from_which_byte ) FROM tabel
Her er værdierne i parentes dem, du skal ændre, samt "tabel" til sidst. Disse svarer til kolonnen ("clob_column") og den tabel, du arbejder med. "for_how_many_bytes" giver dig mulighed for at angive, hvor mange bytes data du vil konvertere, og "from_which_byte" giver dig mulighed for at angive et udgangspunkt.
Så hvis du har en tabel kaldet "skatter" og et felt kaldet "net_pay", og hvis du antager, at du vil have 4.000 bytes fra den første, skal du indtaste:
VÆLG dbms_lob.substr (net_pay, 4000, 1) FRA skatter
For at konvertere strengen til varchar2-format.
TO_CHAR-metoden
Du kan også bruge kommandoen TO_CHAR med en meget lignende syntaks for at opnå det samme mål:
SELECT TO_CHAR(SUBSTR (clob_column, 0,3999)) FRA tabel
Her er start- og slutbytes angivet som 0 og 3999 (for en streng på 4.000 tegn, der starter fra begyndelsen), men felterne "clob_column" og "table" bruges på nøjagtig samme måde som Før. Så i det samme eksempel kan du indtaste:
SELECT TO_CHAR(SUBSTR (net_pay, 0,3999)) FRA skatter
Dybest set, i stedet for at fuldføre processen i et enkelt trin, bruger dette kommandoen SUBSTR til at trække en understreng fra den større streng, og derefter bruger den "to_char" til at håndtere konverteringen. Hvis den pågældende clob-kolonne har færre end 4.000 bytes information, kan du indtaste navnet på kolonnen i parentes efter to_char i stedet for at angive en understreng.