Oracle
 sql >> Base de données >  >> RDS >> Oracle

Copier des données d'un fichier dans un CLOB dans Oracle

Copier des données d'un fichier dans un CLOB dans Oracle

La procédure suivante copy_file_data_to_clob() montre comment lire le texte d'un fichier et
le stocker dans un CLOB :
CREATE PROCEDURE copy_file_data_to_clob(
p_clob_id INTEGER,
p_directory VARCHAR2,
p_file_name VARCHAR2
) AS
v_file UTL_FILE.FILE_TYPE;
v_chars_read INTEGER;
v_dest_clob CLOB;
v_amount INTEGER :=32767;
v_char_buffer VARCHAR2(32767 );
BEGIN
-- insérez un CLOB vide
INSERT INTO clob_content(
id, clob_column
) VALUES (
p_clob_id, EMPTY_CLOB()
);
-- obtenir le localisateur LOB du CLOB
SELECT clob_column
INTO v_dest_clob
FROM clob_content
WHERE id =p_clob_id
FOR UPDATE ;
-- ouvrir le fichier pour lire du texte (jusqu'à v_amount caractères par ligne)
v_file :=UTL_FILE.FOPEN(p_directory, p_file_name, 'r', v_amount);
-- copier les données du fichier dans v_dest_clob une ligne à la fois
LOOP
BEGIN
-- lire une ligne du fichier dans v_char_buffer ;
-- G ET_LINE() ne copie pas le caractère de saut de ligne dans
-- v_char_buffer
UTL_FILE.GET_LINE(v_file, v_char_buffer);
v_chars_read :=LENGTH(v_char_buffer);
-- ajoutez le ligne à v_dest_clob
DBMS_LOB.WRITEAPPEND(v_dest_clob, v_chars_read, v_char_buffer);
-- ajouter une nouvelle ligne à v_dest_clob car v_char_buffer;
-- la valeur ASCII pour la nouvelle ligne est 10, donc CHR(10 ) renvoie une nouvelle ligne
DBMS_LOB.WRITEAPPEND(v_dest_clob, 1, CHR(10));
EXCEPTION
-- lorsqu'il n'y a plus de données dans le fichier, quittez
WHEN NO_DATA_FOUND THEN
EXIT ;
END ;
END LOOP ;
-- fermer le fichier
UTL_FILE.FCLOSE(v_file);
DBMS_OUTPUT.PUT_LINE('Copier avec succès terminé.');
END copy_file_data_to_clob;
/