|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
平台即服务PaaS、基础设施即服务IaaS、软件即服务SaaS都是我们比较熟悉的MySQL学习教程,现在又出现了数据库即服务DBaaS,以基于云的方式存储结构化数据。excel|oracle|数据|数据库
比来做的一个项目,个中有一块的功效是将数据导出为excel文件。我利用了oracle的utl_file程序包。
次要完成思绪:
1、声明一个记录,用来存储导出的数据;
2、利用游标取数据到记录中;
3、利用utl_file将记录中的数据写进excel文件;
4、轮回实行步骤2和3,完成数据的导出。
做的过程当中次要碰到的成绩:
1、excle文件中写数据怎样写进下一列;
利用TAB字符完成excel中横向跳格,excel中TAB字符暗示单位格的开头,个中利用了chr()函数,
使用举比方下:
selectU.USER_NAME||chr(9),U.ACCOUNT||chr(9)fromUSERU
例句1
例句1作为游标的主体,掏出的数据每项都包括一个TAB字符,利用utl_file.put()往excel文件中
写数据时会主动跳格
2、声明的记录中各项的范例成绩
这个成绩的发生次要是在范例的强转化时发生。如例句1种的U.ACCOUNT为number型时,
增加||chr(9)时oracle会对举行强转化;固然这里的转化不会有成绩(number转化为varchar2),
可是当这类强转换仍是会呈现成绩的,如声明的记录里某个属性声明为用户本人界说的一品种型,
oracle没法举行转换,则会报错。办理的举措很复杂,能够将记录的属性都声明为varchar范例,可是要注重长度。
3、导出文件存储路径成绩
utl_file在写文件时,文件的存储路径必需在oracle初始化参数utl_file_dir中设置,
需重起服务才干失效。厥后经由查材料发明能够先创建一个directory,在存储过程当中利用它。
创建directory的语句:
createorreplacedirectoryFILEPATHaspath";
例句2(注:path为存储文件的路径,如c:Temp)
以下是我复杂做的处置hr.jobs表数据的存储历程:
CREATEORREPLACEPROCEDURESP_JOBS_DATA_OUT(
p_file_nameINVARCHAR2--***处置文件称号,需包括扩大名(xls用于写excel文件)***--
)as
--***界说并声明存储交通资产信息的记录***--
--***record_definestart***--
TYPEjob_record_typeisRECORD(
job_idhr.jobs.job_id%TYPE,
job_titlehr.jobs.job_title%TYPE,
min_salaryvarchar2(30)
);
job_recjob_record_type;
--***record_defineend***--
--***界说猎取job信息的游标***--
--***cursor_definestart***--
CURSORc_jobsIS
select
job_id||chr(9),--***chr(9)是TAB字符,包管数据输入到EXCEL时能主动换到下一列***--
job_title||chr(9),
min_salary||chr(9)
FROM
hr.jobs;
--***cursor_defineend***--
l_fileutl_file.file_type;--***处置文件操纵的句柄***--
BEGIN
l_file:=utl_file.fopen(FILEPATH,p_file_name,w);--FILEPATH是先于导出前用户创建的存储导出文件的路径
utl_file.put_line(l_file,jobs表导出数据);
OPENc_jobs;
LOOP
FETCHc_jobsINTO
job_rec.job_id,
job_rec.job_title,
job_rec.min_salary;
EXITWHENc_jobs%NOTFOUND;
utl_file.put(l_file,job_rec.job_id);--***数据写进excle文件中***--
utl_file.put(l_file,job_rec.job_title);
utl_file.put_line(l_file,job_rec.min_salary);
ENDLOOP;
CLOSEc_jobs;
utl_file.fflush(l_file);
utl_file.fclose(l_file);
EXCEPTION
WHENothersTHEN
IFutl_file.is_open(l_file)THEN
utl_file.fclose(l_file);
ENDIF;
END;
例句3(注:我的oracle版本为9.2)
这是我第一个blog,大概内容不是很有手艺含量的说,但总但愿纪录一下本人的过程,分享人人的履历。
msn:lintaowen@hotmail.com
如果你在一个遵循GPL的自由(开源)项目中使用MySQL,那么你可以遵循GPL协议使用MySQL。然而,如果你的项目不是在GPL协议下的话,你必须为使用MySQL来支付许可费用,或者你可能因为这个因素而将你的项目改为遵循GPL。 |
|