利用存储过程数据库中的数据生成txt文件
2009-05-19 17:29
786 查看
PROCEDURE PROC_WRITE_DAT_POD( o_sts OUT BINARY_INTEGER,
o_errm OUT VARCHAR2)
IS
PROCESS_ERROR EXCEPTION;
w_errm VARCHAR2(100);
w_cursor T_CURSOR;
l_dat_file utl_file.file_type;
w_sql1 VARCHAR2(4000 BYTE);
w_inp_str VARCHAR2(4000);
w_file_name VARCHAR2(200); --ファイル名
w_create_folder_sql VARCHAR2(200);
w_fexist_flg BOOLEAN;
w_block_size BINARY_INTEGER;
w_cis_ms_item CIS_MS_ITEM1;
w_flength NUMBER:=0;
c_gst_filepath VARCHAR2(20) := 'UCE_DIR';
w_path VARCHAR2(20) := 'E:/ztg';
BEGIN
o_sts := c_process_sts_ok;
--フォルダを指定する
w_create_folder_sql :=' create or replace directory '||c_gst_filepath|| ' as '''
|| w_path ||'''';
EXECUTE IMMEDIATE w_create_folder_sql;
w_file_name:='test.txt';
--ファイルを生成する
l_dat_file :=utl_file.fopen(c_gst_filepath,w_file_name ,'w',32767);
utl_file.fgetattr(c_gst_filepath,w_file_name,w_fexist_flg,w_flength,w_block_size);
IF NOT w_fexist_flg THEN
w_errm :='Create file error.';
RAISE PROCESS_ERROR;
END IF;
--1:Segment Name: Message Header部分を記入する
w_inp_str := 'Hear is message header!!!!!!!!!!!';
IF utl_file.is_open(l_dat_file) THEN
utl_file.put_line(l_dat_file,w_inp_str,TRUE);
--w_flength := w_flength+1;
ELSE
w_errm :='Write file error';
RAISE PROCESS_ERROR;
END IF;
--w_inp_strをクリアする
w_inp_str :='';
--2:Segment Name: Header Information部分を記入する
w_sql1:=' select item_code,vendor_code,item_description,ins_date from cis_ms_item t ';
--|| ' where t.item_code = ''' || i_vmisitecode || '''';
--w_sql1を実行する
OPEN w_cursor FOR w_sql1;
LOOP
FETCH w_cursor INTO w_cis_ms_item;
EXIT WHEN w_cursor%NOTFOUND;
--ファイルにデータを記入する
w_inp_str := w_cis_ms_item.item_code || ','
|| w_cis_ms_item.vendor_code || ','
|| w_cis_ms_item.item_description || ','
|| w_cis_ms_item.ins_date;
IF utl_file.is_open(l_dat_file) THEN
utl_file.put_line(l_dat_file,w_inp_str,TRUE);
w_flength := w_flength+1;
ELSE
w_errm :='Write file error';
RAISE PROCESS_ERROR;
END IF;
END LOOP;
CLOSE w_cursor;
--w_inp_strをクリアする
w_inp_str :='';
-- 4:Segment Name: Message Trailer部分を記入する
w_inp_str := 'レコード合計数:' || w_flength;
IF utl_file.is_open(l_dat_file) THEN
utl_file.put_line(l_dat_file,w_inp_str,TRUE);
ELSE
w_errm :='Write file error';
RAISE PROCESS_ERROR;
END IF;
utl_file.fclose_all;
EXCEPTION
WHEN PROCESS_ERROR THEN
ROLLBACK;
utl_file.fclose_all;
--生成したファイルを削除する
utl_file.fgetattr(c_gst_filepath,w_file_name,w_fexist_flg,w_flength,w_block_size);
IF w_fexist_flg THEN
utl_file.fremove(c_gst_filepath,w_file_name);
END IF;
o_sts:=c_process_sts_error;
o_errm :=dbms_utility.format_error_stack;
WHEN OTHERS THEN
ROLLBACK;
utl_file.fclose_all;
--生成したファイルを削除する
utl_file.fgetattr(c_gst_filepath,w_file_name,w_fexist_flg,w_flength,w_block_size);
IF w_fexist_flg THEN
utl_file.fremove(c_gst_filepath,w_file_name);
END IF;
o_sts:=c_process_sts_error;
o_errm :=dbms_utility.format_error_stack;
END;
o_errm OUT VARCHAR2)
IS
PROCESS_ERROR EXCEPTION;
w_errm VARCHAR2(100);
w_cursor T_CURSOR;
l_dat_file utl_file.file_type;
w_sql1 VARCHAR2(4000 BYTE);
w_inp_str VARCHAR2(4000);
w_file_name VARCHAR2(200); --ファイル名
w_create_folder_sql VARCHAR2(200);
w_fexist_flg BOOLEAN;
w_block_size BINARY_INTEGER;
w_cis_ms_item CIS_MS_ITEM1;
w_flength NUMBER:=0;
c_gst_filepath VARCHAR2(20) := 'UCE_DIR';
w_path VARCHAR2(20) := 'E:/ztg';
BEGIN
o_sts := c_process_sts_ok;
--フォルダを指定する
w_create_folder_sql :=' create or replace directory '||c_gst_filepath|| ' as '''
|| w_path ||'''';
EXECUTE IMMEDIATE w_create_folder_sql;
w_file_name:='test.txt';
--ファイルを生成する
l_dat_file :=utl_file.fopen(c_gst_filepath,w_file_name ,'w',32767);
utl_file.fgetattr(c_gst_filepath,w_file_name,w_fexist_flg,w_flength,w_block_size);
IF NOT w_fexist_flg THEN
w_errm :='Create file error.';
RAISE PROCESS_ERROR;
END IF;
--1:Segment Name: Message Header部分を記入する
w_inp_str := 'Hear is message header!!!!!!!!!!!';
IF utl_file.is_open(l_dat_file) THEN
utl_file.put_line(l_dat_file,w_inp_str,TRUE);
--w_flength := w_flength+1;
ELSE
w_errm :='Write file error';
RAISE PROCESS_ERROR;
END IF;
--w_inp_strをクリアする
w_inp_str :='';
--2:Segment Name: Header Information部分を記入する
w_sql1:=' select item_code,vendor_code,item_description,ins_date from cis_ms_item t ';
--|| ' where t.item_code = ''' || i_vmisitecode || '''';
--w_sql1を実行する
OPEN w_cursor FOR w_sql1;
LOOP
FETCH w_cursor INTO w_cis_ms_item;
EXIT WHEN w_cursor%NOTFOUND;
--ファイルにデータを記入する
w_inp_str := w_cis_ms_item.item_code || ','
|| w_cis_ms_item.vendor_code || ','
|| w_cis_ms_item.item_description || ','
|| w_cis_ms_item.ins_date;
IF utl_file.is_open(l_dat_file) THEN
utl_file.put_line(l_dat_file,w_inp_str,TRUE);
w_flength := w_flength+1;
ELSE
w_errm :='Write file error';
RAISE PROCESS_ERROR;
END IF;
END LOOP;
CLOSE w_cursor;
--w_inp_strをクリアする
w_inp_str :='';
-- 4:Segment Name: Message Trailer部分を記入する
w_inp_str := 'レコード合計数:' || w_flength;
IF utl_file.is_open(l_dat_file) THEN
utl_file.put_line(l_dat_file,w_inp_str,TRUE);
ELSE
w_errm :='Write file error';
RAISE PROCESS_ERROR;
END IF;
utl_file.fclose_all;
EXCEPTION
WHEN PROCESS_ERROR THEN
ROLLBACK;
utl_file.fclose_all;
--生成したファイルを削除する
utl_file.fgetattr(c_gst_filepath,w_file_name,w_fexist_flg,w_flength,w_block_size);
IF w_fexist_flg THEN
utl_file.fremove(c_gst_filepath,w_file_name);
END IF;
o_sts:=c_process_sts_error;
o_errm :=dbms_utility.format_error_stack;
WHEN OTHERS THEN
ROLLBACK;
utl_file.fclose_all;
--生成したファイルを削除する
utl_file.fgetattr(c_gst_filepath,w_file_name,w_fexist_flg,w_flength,w_block_size);
IF w_fexist_flg THEN
utl_file.fremove(c_gst_filepath,w_file_name);
END IF;
o_sts:=c_process_sts_error;
o_errm :=dbms_utility.format_error_stack;
END;
相关文章推荐
- 利用存储过程读指定文件夹里所有txt文件,将数据插入数据库中
- 存储过程将.txt.xls文件数据导入数据库表格
- 存储过程将.txt.xls文件数据导入数据库表格
- 将数据库表中数据生成Insert SQL语气的存储过程
- 将数据库表中的数据生成Insert脚本的存储过程(改版)
- java小程序从数据库中(表)中读取数据然后创建文件夹生成txt文件
- 利用存储过程来消除数据库中冗余的数据
- 将数据库表中的数据生成Insert脚本的存储过程(改版)
- 利用存储过程,生成N行数据进行压力测试脚本
- 将数据库表中的数据生成Insert脚本的存储过程!!!
- 利用存储过程将Excel中数据导入到数据库表中
- 利用存储过程将表中的数据生成Insert语句
- leveldb研究2- 存储分析,数据库日志文件格式,数据文件的格式和生成
- 利用php访问数据库数据表,生成javabean.java文件,符合javabean语法
- 将数据库表中的数据生成Insert脚本的存储过程!!!
- 利用存储过程批量生成数据
- asp.net(c#)如何读取上传过程中的.txt文件中的数据,并将其写入数据库的
- mysql利用存储过程实现对数据库数据的迁移
- 利用数据库的存储过程生成java的formbean对象
- SQL C# nvarchar类型转换为int类型 多表查询的问题,查询结果到新表,TXT数据读取到控件和数据库,生成在控件中的数据如何存到TXT文件中