Excel 轻松操作Oracle数据库_oracle数据库常用操作
Excel 轻松操作Oracle数据库由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“oracle数据库常用操作”。
Excel通过ADO方式连接到Oracle并操作Oracle给那些编程能力不强的人带来很大的福音,结合着Excel的数据处理与图表制作,就能很轻松地处理一些常规工作。
日常工作中需要查询各种数据,而且不断变化,处理这些数据的人不是技术人员,不会连接数据库自己查询,通过下面的办法就可以让技术人员编辑好包含查询语句的excel文件,让管理人员自己输入条件取数了。我的方法是编辑需要的SQL语句保存在单元格中,并在查询条件需要参数值的地方用问号“?”代替,再在其他单元格中保存查询条件所需的参数值,在“宏”中用参数值替换掉SQL语句中的问号,最后执行查询语句并将结果保存到excel表中。
以下是通过Excel的VBA连接Oracle并读取Oracle相关数据的步骤:
1、引用ADO相关组件:
打开VBA编辑器,在菜单中点选“工具”--》“引用”。确保“Microsoft ActiviteX Data Objects 2.8 Library”和“Microsoft ActiviteX Data ObjectSRecordset 2.8 Library”被勾选上。
2、建立读取数据的过程: Public Sub get_data()'根据工作表中的查询语句读取数据 On Error GoToErrMsg:
Dim cnn As Object, rst As Object Dim name, stat, sqls, field As String Dim pm(4)As String Dim i, j, lineno As Integer Dim OraOpen As Boolean
Set cnn = CreateObject(“ADODB.Connection”)Set rst = CreateObject(“ADODB.Recordset”)sqls = “connect database” cnn.Open “Provider=msdaora;Data Source=dl580;User Id=sxjk;Paword=sxjk;” OraOpen = True '成功执行后,数据库即被打开
If OraOpen Then lineno = [D65536].End(xlUp).Row Else lineno = 0 '行数
For i = 3 To lineno name = Cells(i, 2)'保存数据工作表名称 stat = Cells(i, 3)'是否需要读取数据 field = Cells(i, 4)'清除原表数据定位 pm(1)= Cells(i, 6)'参数值 pm(2)= Cells(i, 8)pm(3)= Cells(i, 10)pm(4)= Cells(i, 12)sqls = Cells(i, 15)For j = 1 To 4 If pm(j)“” Then sqls = Replace(sqls, “?”, pm(j), 1, 1)'用参数值替换SQL语句中的问号 'MsgBoxsqls End If Next j If stat = “Y” Or stat = “y” Then Set rst = cnn.Execute(sqls)sqls = “CopyFromRecordset” maxrow = Sheets(name).[A65536].End(xlUp).Row + 1 Sheets(name).Range(“a3:” & field &maxrow).ClearContents '清除原表数据
Sheets(name).Range(“a2”).CopyFromRecordsetrst '执行SQL并提取数据
Cells(i, 3)= “成功” End If Next i Worksheets(“系统参数”).Select msg = MsgBox(“数据读取完毕!”, vbOKOnly, “iamlaosong”)Exit Sub ErrMsg: OraOpen = False MsgBoxsqls, vbCritical, “操作失败,请检查!” End Sub3、SQL语句实例 这是一个简单的语句:
SELECT * FROM zdgc_sn_sj_gfl t WHERE t.CLCT_DATE = to_date('?','yyyy-mm-dd')AND t.JSBZ = '1' ORDER BY t.CITY, t.SSXS
这是一个复杂的语句:
select aa.zj_code,aa.zj_mc,aa.clct_date,aa.sjzl,aa.jyqsjzl,nvl(bb.wgfsl,0),nvl(bb.jyqwgfsl,0)from(select b.xs,b.zj_code,b.zj_mc,a.clct_date,count(*)sjzl, sum(case when to_char(a.clct_time, 'hh24mi')'6' and a.mail_kind_code '10401' and a.addi_service_code '1'
and(a.rcv_area like '23%' or a.rcv_area like '24%')group by b.xs,b.zj_code, b.zj_mc,a.clct_date)aa left join(select b.xs,b.zj_code, b.zj_mc, a.clct_date,count(*)wgfsl, sum(decode(jybz, 'b', 1, 0))jyqwgfsl from sncn_zd_jgb,zdgc_sn_sj_errfc a where a.zj_code = b.zj_code and a.jsbz = '1' and a.jybz = 'b' group by b.xs,b.zj_code, b.zj_mc, a.clct_date)bb on aa.xs=bb.xs and aa.zj_code=bb.zj_code and aa.clct_date=bb.clct_date where aa.clct_date = to_date('?','yyyy-mm-dd')and aa.xs = '?' order by aa.zj_code,aa.zj_mc4、操作界面 这是一个:
这是另一个:
5、说明
使用者需要安装Oracle客户端并进行本地服务名配置(运行客户端程序Net Configuration Aistant配置,本例配置的服务名是DL580),实际就是配置tnsnames.ora文件。也可以安装简易oracle客户端,并用记事本修改tnsnames.ora文件,本例就是需要在该文件中增加如下内容(本例Oracle数据库服务器地址是10.178.10.197,SID是ORCL):
DL580 =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 10.178.10.197)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))通过工作表保护使使用者只能修改参数值和状态,其他不能修改,防止破坏相关设置。