Hur man konverterar från Clob till Varchar2 i Oracle

click fraud protection

Att konvertera data i ett strängformat mellan olika datatyper är vanligtvis en enkel process i Oracle, men vissa fall är lite mer utmanande än andra. En av dessa inträffar när du använder Oracle för att konvertera clob till varchar2, vilket är svårt eftersom en varchar2 kolumn har maximalt 4 000 tecken, medan clob kan lagra enorma mängder tecken data. Du kan dock fortfarande uppnå ditt mål genom att använda antingen dbms_lob substr-metoden eller to_char och ange en maximal storlek.

CLOB och VARCHAR2 förklaras

CLOB (eller "clob" i vardagsspråk) är en förkortning för "karaktärsstort objekt" och det kan lagra upp till 4 GB data. Den används av flera databassystem, inklusive DB2 och Oracle. CLOB är användbart när du behöver lagra stora mängder data, men själva storleken kan orsaka problem i vissa situationer. Det är därför som konvertering från en Oracle CLOB till ett strängformat av en mer hanterbar storlek ofta är ett bra tillvägagångssätt innan operationer utförs.

Dagens video

VARCHAR2-formatet lagrar mindre mängder data, vanligtvis upp till 4 000 byte, om du inte använder en utökad maximal strängstorlek, i vilket fall den kan gå upp till 32 767 byte. För en enbyte-teckenuppsättning kan du vanligtvis få upp till 4 000 tecken i en kolumn. Avvikelsen mellan de maximala storlekarna för dessa två dataformat är där problemen uppstår under konverteringen.

Metoden dbms_lob substr

För att konvertera en clob-sträng till varchar2, öppna ditt SQL *Plus-program. Syntaxen för konverteringen du behöver utföra är:

VÄLJ dbms_lob.substr( clob_column, for_how_many_bytes, from_which_byte ) FRÅN tabellen

Här är värdena inom parentes de du måste ändra, samt "tabell" i slutet. Dessa motsvarar kolumnen ("clob_column") och tabellen du arbetar med. "for_how_many_bytes" ger dig möjlighet att ange hur många byte med data du vill konvertera, och "from_which_byte" låter dig ange en startpunkt.

Så om du har en tabell som heter "skatter" och ett fält som heter "net_pay" och antar att du vill ha 4 000 byte från den första, skulle du ange:

VÄLJ dbms_lob.substr (net_pay, 4000, 1) FRÅN skatter

För att konvertera strängen till varchar2-format.

TO_CHAR-metoden

Du kan också använda kommandot TO_CHAR med en mycket liknande syntax för att uppnå samma mål:

SELECT TO_CHAR(SUBSTR (clob_column, 0,3999)) FRÅN tabell

Här anges början och slutbyte som 0 och 3999 (för en sträng på 4 000 tecken som börjar från början), men fälten "clob_column" och "table" används på exakt samma sätt som innan. Så i samma exempel kan du ange:

SELECT TO_CHAR(SUBSTR (net_pay, 0,3999)) FROM skatter

I grund och botten, snarare än att slutföra processen i ett enda steg, använder detta kommandot SUBSTR för att dra en delsträng från den större strängen, och sedan använder den "to_char" för att hantera konverteringen. Om clob-kolumnen i fråga har färre än 4 000 byte med information kan du ange namnet på kolumnen inom parentes efter to_char istället för att ange en delsträng.