Kopieren von Daten aus einer Datei in ein CLOB in Oracle
Die folgende copy_file_data_to_clob()-Prozedur zeigt, wie Text aus einer Datei gelesen und
in einem CLOB gespeichert wird:
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
-- Einfügen eines leeren CLOB
INSERT INTO clob_content(
id, clob_column
) VALUES (
p_clob_id, EMPTY_CLOB()
);
-- Holen Sie sich den LOB-Locator des CLOB
SELECT clob_column
INTO v_dest_clob
FROM clob_content
WHERE id =p_clob_id
FOR UPDATE;
-- Datei zum Lesen von Text öffnen (bis zu v_Anzahl Zeichen pro Zeile)
v_file :=UTL_FILE.FOPEN(p_directory, p_file_name, 'r', v_amount);
-- kopieren die Daten aus der Datei zeilenweise in v_dest_clob
LOOP
BEGIN
-- eine Zeile aus der Datei in v_char_buffer lesen;
-- G ET_LINE() kopiert das Zeilenumbruchzeichen nicht in
-- v_char_buffer
UTL_FILE.GET_LINE(v_file, v_char_buffer);
v_chars_read :=LENGTH(v_char_buffer);
-- append the line to v_dest_clob
DBMS_LOB.WRITEAPPEND(v_dest_clob, v_chars_read, v_char_buffer);
-- einen Zeilenumbruch an v_dest_clob anhängen, weil v_char_buffer;
-- der ASCII-Wert für newline ist 10, also CHR(10 ) gibt Zeilenumbruch zurück
DBMS_LOB.WRITEAPPEND(v_dest_clob, 1, CHR(10));
AUSNAHME
-- wenn keine Daten mehr in der Datei sind, dann beenden
WHEN NO_DATA_FOUND THEN
EXIT;
END;
END LOOP;
-- Datei schließen
UTL_FILE.FCLOSE(v_file);
DBMS_OUTPUT.PUT_LINE('Kopieren erfolgreich abgeschlossen.');
END copy_file_data_to_clob;
/