2010-10-08 9 views
20

Voglio creare uno script di inserimento che verrà utilizzato solo per inserire un record in una tabella.Come scrivere lo script di inserimento di Oracle con un campo come CLOB?

Ha 5 colonne e una di queste è di tipo CLOB.

Ogni volta che provo, dice che non è possibile inserire la stringa è così lunga. maggiore di 4000.

Ho bisogno di una dichiarazione di inserimento con clob come un campo.

INSERT INTO tbltablename 
      (id, 
      NAME, 
      description, 
      accountnumber, 
      fathername) 
VALUES  (1, 
      N'Name', 
      clob'some very long string here, greater than 4000 characters', 
      23, 
      'John') ; 

risposta

15

Tenete a mente che le stringhe SQL non possono essere più grandi di 4000 byte, mentre Pl/SQL può avere le stringhe grandi come 32.767 byte. vedi sotto per un esempio di inserimento di una stringa di grandi dimensioni tramite un blocco anonimo che credo farà tutto il necessario per farlo.

nota ho cambiato il VARCHAR2 (32000) a CLOB

set serveroutput ON 
CREATE TABLE testclob 
    ( 
    id NUMBER, 
    c CLOB, 
    d VARCHAR2(4000) 
); 

DECLARE 
    reallybigtextstring CLOB := '123'; 
    i     INT; 
BEGIN 
    WHILE Length(reallybigtextstring) <= 60000 LOOP 
     reallybigtextstring := reallybigtextstring 
           || '000000000000000000000000000000000'; 
    END LOOP; 

    INSERT INTO testclob 
       (id, 
       c, 
       d) 
    VALUES  (0, 
       reallybigtextstring, 
       'done'); 

    dbms_output.Put_line('I have finished inputting your clob: ' 
         || Length(reallybigtextstring)); 
END; 

/
SELECT * 
FROM testclob; 


"I have finished inputting your clob: 60030" 
+1

Questa è una buona risposta per CLOB fino a 32'000 caratteri. Per i CLOB più grandi, è necessario creare un CLOB temporaneo (vedere il pacchetto DBMS_LOB), aggiungere i dati in blocchi di 32'000 e inserire il CLOB temporaneo nella tabella. – Codo

+0

@codo, questo è davvero un buon punto, ma in questo esempio dbms_lob non era necessario - almeno in 11r1 (e non avrei dovuto impostare ReallyBigTextString come VARCHAR2 (32000) - Modificherò l'esempio sopra. – Harrison

+0

You ' L'uso di DBMS_LOB probabilmente non è necessario, ma se non usi una stringa artificiale, come fai ripetendo la stessa sottostringa ancora e ancora, allora sei limitato dalla dimensione della dichiarazione/inizio/Fine blocco: con una certa dimensione (circa 100 K), viene visualizzato un messaggio di errore, quindi devi dividere la tua lunga stringa in blocchi e dividerla su più blocchi di dichiarazione/inizio/fine. È piuttosto difficile. – Codo

Problemi correlati