2009-01-08 8 views

Répondre

0

Je trouve cette citation:

Dans Oracle9i, vous pouvez même:

alter table OLD_TABLE modifier (c clob );

pour le convertir.

Voir ici: http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1037232794454

Modifier

La longueur maximale d'une colonne de varchar2 est 4000. Est-ce trop court?

+0

Une application existante et assez fragile utilise actuellement cette table, donc je préfère ne pas modifier la table existante de peur de renverser le château de cartes. –

0

J'ai trouvé que cela fonctionne bien sur les types de données CLOB. Je crois que la même chose serait vraie pour les types de LOB.

create or replace function lob2char(clob_col clob) return varchar2 IS 
buffer varchar2(4000); 
amt BINARY_INTEGER := 4000; 
pos INTEGER := 1; 
l clob; 
bfils bfile; 
l_var varchar2(4000):=''; 
begin 
LOOP 
if dbms_lob.getlength(clob_col)<=4000 THEN 
dbms_lob.read (clob_col, amt, pos, buffer); 
l_var := l_var||buffer; 
pos:=pos+amt; 
ELSE 
l_var:= 'Cannot convert. Exceeded varchar2 limit'; 
exit; 
END IF; 
END LOOP; 
return l_var; 
EXCEPTION 
WHEN NO_DATA_FOUND THEN 
return l_var; 
END; 



INSERT INTO NEWTABLE (NEWCOLUMN) SELECT RTRIM(lob2char(OLDCOLUMN)) FROM OLDTABLE; 
+0

À quoi sert la boucle? –