F1, F2 dosyaların işlem yapmamız için uçları
V1 satırları içine okuyacağımız değişkenimiz VARCHAR cinsinden ve maks uzunlukta(32767), Bir karakter uzun olursa istisna fırlatacağı için HER TÜRLÜ İSTİSNA (OTHERS) durumunda çık diyoruz (WHEN OTHERS THEN EXIT;)
declare
V1 VARCHAR2(32767);
F1 UTL_FILE.FILE_TYPE;
F2 UTL_FILE.FILE_TYPE;
begin
-- R : Read (Okumak için açıyoruz)
F1 := UTL_FILE.FOPEN('d:\temp','test.txt','R',256);
-- W : Write (Yazmak için açıyoruz)
F2 := UTL_FILE.FOPEN('d:\temp','test1.txt','W',256);
LOOP
BEGIN
UTL_FILE.GET_LINE(F1, V1, 32767);
DBMS_OUTPUT.PUT_LINE(V1);
UTL_FILE.PUT_LINE(F2,V1);
EXCEPTION
WHEN OTHERS THEN
EXIT;
END;
END LOOP;
UTL_FILE.FCLOSE(F1);
UTL_FILE.FCLOSE(F2);
dbms_output.put_line('Tüm dosyalar kapandı');
end;
Refs: http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_lob.htm#i998315
CLOB Değişkenin dosyaya yazılması.
DECLARE
dirEFaturalar varchar2(100) default 'd:\EFaturalar';
X_GUID VARCHAR2(100) DEFAULT '';
fileEfatura UTL_FILE.FILE_TYPE;
len_efaturaBuffer VARCHAR2(32767);
len_efaturaAmount BINARY_INTEGER := 32767;
len_efaturaCopyPos INTEGER := 1;
BEGIN
X_GUID := UPPER(REGEXP_REPLACE(SYS_GUID(), '(.{8})(.{4})(.{4})(.{4})(.{12})', '\1-\2-\3-\4-\5'));
fileEfatura := UTL_FILE.FOPEN('d:\EFaturalar', X_GUID || '.txt', 'W', 32767);
LOOP
BEGIN
DBMS_LOB.read (x_clob, len_efaturaAmount, len_efaturaCopyPos, len_efaturaBuffer);
UTL_FILE.put(fileEfatura, len_efaturaBuffer);
len_efaturaCopyPos := len_efaturaCopyPos + len_efaturaAmount;
EXCEPTION
WHEN OTHERS THEN EXIT;
END;
END LOOP;
UTL_FILE.FCLOSE(fileEfatura);
END;