飘灵儿 发表于 2015-1-16 22:43:46

MYSQL网页编程之利用utl_file将oracle数据库中数据写进...

平台即服务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。

活着的死人 发表于 2015-1-19 21:47:53

我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力

小魔女 发表于 2015-1-26 20:14:46

我个人认为就是孜孜不懈的学习

冷月葬花魂 发表于 2015-2-4 20:30:55

语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!

愤怒的大鸟 发表于 2015-2-10 07:23:55

多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。

灵魂腐蚀 发表于 2015-3-1 03:16:57

理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识

金色的骷髅 发表于 2015-3-10 12:30:24

至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。

海妖 发表于 2015-3-17 06:47:53

是要和操作系统进行Socket通讯的场景。否则建议慎重!

兰色精灵 发表于 2015-3-24 00:24:30

两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书
页: [1]
查看完整版本: MYSQL网页编程之利用utl_file将oracle数据库中数据写进...