我需要在使用PL/SQL的UTL_FILE包生成的csv文件中顯示以下內容。Oracle UTL_FILE - 單個單元格在excel中的多行
標題1 Heading2 Heading3 ABCDE 123 987641213 XXX街道 YYYY
對於 '標題1' 的每個值,我得到3行爲地址從特定表。 在輸出csv文件中,我需要在一個單元格中顯示地址,並用新行分隔數據。我嘗試使用遊標和附加數據使用chr(10),chr(12),chr(15)但徒勞。
請幫助我獲得輸出。
我需要在使用PL/SQL的UTL_FILE包生成的csv文件中顯示以下內容。Oracle UTL_FILE - 單個單元格在excel中的多行
標題1 Heading2 Heading3 ABCDE 123 987641213 XXX街道 YYYY
對於 '標題1' 的每個值,我得到3行爲地址從特定表。 在輸出csv文件中,我需要在一個單元格中顯示地址,並用新行分隔數據。我嘗試使用遊標和附加數據使用chr(10),chr(12),chr(15)但徒勞。
請幫助我獲得輸出。
你要引用你的領域有運輸returnseg
heading1,headiing2,heading3
abcde,123,"1 street
town
90210"
abcde,124,"13 street
town
43245"
什麼DazzaL提出應該工作,但如果你不能在你的情況下更改輸入文件,您可以使用此代碼:
declare
v_line varchar2(2000);
v_c1 varchar2(10);
v_c2 varchar2(10);
v_c3 varchar2(1980);
nb_line_per_record integer := 3;
v_line_in_record integer;
v_seperator varchar2(1) := ',';
v_file UTL_FILE.FILE_TYPE;
begin
v_file := utl_file.FOPEN(your_directory, 'your_file','r');
v_line_in_record := 0;
--we skip the first line
UTL_FILE.GET_LINE(v_file, v_line);
loop
v_line_in_record := v_line_in_record + 1;
begin
UTL_FILE.GET_LINE(v_file, v_line);
EXCEPTION
WHEN no_data_found THEN
exit;
END;
--first line of record we cut by v_seperator
if v_line_in_record = 1 then
v_c1 := substr(v_line,1,instr(v_line,v_seperator,1,1)-1);
v_c2 := substr(v_line,instr(v_line,v_seperator,1,1)+1,
instr(v_line,v_seperator,1,2)-
instr(v_line,v_seperator,1,1)-1);
v_c3 := substr(v_line,instr(v_line,v_seperator,1,2)+1)
|| char(10);--if you want new line in adresse
else
--not first line we concatanate to adress with new line
v_c3 := v_c3 || v_line ||
case when v_line_in_record = 2 then char(10) else '' end;
end if;
if v_line_in_record = 3 then
v_line_in_record := 0;
--do something with your record
insert into yourtable values (v_c1,v_c2,v_c3);
end if;
end loop;
UTL_FILE.FCLOSE(v_file);
COMMIT;
end;
但是,只有當你確定每條記錄都是3行時,這纔有效。如果我是你,我會在每條記錄後添加一個記錄分隔符,並使用SQLLOADER將此文件加載到表中。您可以定義一個記錄分隔符與SQLLOADER.Here是使用&作爲記錄分隔
options (skip=1) load data infile "yourfile" "str '&'" truncate into table your_table fields terminated by "," trailing nullcols (heading1, heading2, heading3)
個例CTL和如果使用記錄分隔符,你甚至可以創建文件的External Table。
嗨比倫特, 感謝您的奇妙的查詢。但問題是char(10)會使3row輸出的第二行顯示在excel的下一行中......我需要這3行顯示一些東西,比如我們如何在excel中使用ALT + ENTER來輸入單個小區內的數據的多行.... 基本上,它應該是
嗨Dazzal, 我試着用回車ASCII值。我正在使用逗號分隔的列表將UTL_FILE輸出寫入一個csv文件。但是,我將這些特定的回車符作爲特殊字符,如每行之間的框。它們也顯示在同一行上。 – Avinash
你使用什麼字符序列來回車?它應該是chr(13)|| chr(10)。 – DazzaL