ITPUB??ì3
ITPUB论坛 » Oracle ERP » 很有意思的连接方法,Oracle通过DBLink操作Excel

标题: 很有意思的连接方法,Oracle通过DBLink操作Excel
离线 huajhua
灵机一动


精华贴数 21
个人空间 0
技术积分 5001 (260)
社区积分 19 (7618)
注册日期 2004-5-20
论坛徽章:13
管理团队成员管理团队2006纪念徽章会员2007贡献徽章会员2006贡献徽章授权会员ERP板块每日发贴之星
      

发表于 2007-4-14 09:21 
很有意思的连接方法,Oracle通过DBLink操作Excel

连Excel非工业级应用,演示目的在于说明ODBC能连,Generic Connect都能连。

2.2.1.        创建数据库HSXLSExample.xls
1、        Sheet1“DEPT”,字段及数据如下:
DEPT_NO        NAME
1        Test
2        Test2
2、        Sheet2“EMP”,字段及数据如下:
EMP_NO        NAME        DEPT_NO
1        Name1        1
2        Name2        2

2.2.2.        建立DSN HSXLSExample
创建ODBC数据源,并选系统DSN,如下图:

注意,如果想用DML操作,需要去掉只读设置。

2.2.3.        创建SID HSXLS
进入%ORACLE_HOME%\hs\admin,如D:\Oracle\proddb\9.2.0\hs\admin,拷贝inithsodbc.ora为initHSXLS.ora,并改写内容如下:
# This is a sample agent init file that contains the HS parameters that are
# needed for an ODBC Agent.

#
# HS init parameters
#
HS_FDS_CONNECT_INFO = HSXLSExample
HS_FDS_TRACE_LEVEL = 0

#
# Environment variables required for the non-Oracle system
#
#set <envvar>=<value>
注意这里文件名中init之后的字符,它代表一个SID,而HS_FDS_CONNECT_INFO配置的就是ODBC数据源名称。

2.2.4.        添加HSXLS到Listener
进入Listener.ora所在目录如D:\Oracle\proddb\9.2.0\network\admin\PROD_huajhua,在SID_LIST里面添加:
    (SID_DESC =
      (SID_NAME = HSXLS)
      (ORACLE_HOME = <your oracle_home>
      (PROGRAM = hsodbc)
    )
比如我的数据库,添加完后内容如下:
#
# Net8 definition for Database listener
#

PROD =
  (ADDRESS_LIST =
        (ADDRESS= (PROTOCOL= IPC)(KEY= EXTPROCPROD))
        (ADDRESS= (PROTOCOL= TCP)(Host= huajhua.leiko.com )(Port= 1521))
  )

SID_LIST_PROD =
  (SID_LIST =
    (SID_DESC =
      (ORACLE_HOME= d:\oracle\proddb\9.2.0)
      (SID_NAME = PROD)
    )
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = d:\oracle\proddb\9.2.0)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = HSXLS)
      (ORACLE_HOME = d:\oracle\proddb\9.2.0)
      (PROGRAM = hsodbc)
    )
  )

……
重新Listener服务。至此,相当于建立了一个数据库HSXLS,有SID,有侦听。接下来可以像连接Oracle数据库一样用DB Link连接HSXLS。

2.2.5.        添加HSXLS到tnsnames.ora
可以在另一个Oracle数据库上配置,这里我还是在本机做,添加:
HSXLS=
        (DESCRIPTION=
            (ADDRESS=(PROTOCOL=tcp)(HOST=huajhua.leiko.com)(PORT=1521))
            (CONNECT_DATA=(SID=HSXLS))
            (HS=OK)
        )
和普通TNSNAME不同点在于(HS=OK)。

2.2.6.        创建DB Link HSXLS_LINK
可以在另一个Oracle数据库上配置,这里我还是在本机做,创建脚本:
create database link HSXLS_LINK
  connect to leiko identified by LEIKO_PASSWORD
  using 'HSXLS';
注意这里用的是Excel文件所在的操作系统的用户名和密码,想象一下,Excel文件可能在网上邻居;如果是本机,则随便给都行。

2.2.7.        测试,请用标准SQL
1、        看看有哪些表
SELECT table_name FROM all_tables@hsxls_link
返回:
           TABLE_NAME
1        DEPT$
2        EMP$
2、        查询下数据
SELECT dept.NAME dept_name, emp.NAME emp_name
  FROM dept$@hsxls_link dept, emp$@hsxls_link emp
WHERE dept.dept_no = emp.dept_no
ORDER BY 1, 2
返回:
           DEPT_NAME        EMP_NAME
1        Test        Name1
2        Test2        Name2
3、        DML操作
INSERT INTO dept$@hsxls_link VALUES (3, 'Test3');

UPDATE dept$@hsxls_link SET NAME = 'Changed' WHERE dept_no = 3;
如果DSN没有去掉只读标志,上面语句会报Ora-28500、Ora-02063错误。

2.2.8.        删除问题
Excel不支持删除,DELETE FROM dept$@hsxls_link WHERE dept_no = 3;报“该 ISAM 不支持在链接表中删除数据”。
因为Excel工作表中的行与真正的关系型数据库的行是有些不一样的,所以如果通过编程来访问Excel工作表的数据,那么检索,插入,更新应该是没有问题的,但要是删除的话,就会有一些限制。
删除 Excel 数据时,受到的限制要比从关系数据源中删除数据时更多。在关系数据库中,“行”除了表示一条“记录”外没有其他意义;但在 Excel 工作表中却不同。可以删除字段(单元格)中的值,但不能:
1、        一次删除一整条记录,否则将出现以下错误信息:
Deleting data in a linked table is not supported by this ISAM.
只能通过分别清空各个字段的内容来删除一条记录。
2、        删除包含 Excel 公式的单元格中的值,否则将出现以下错误信息:
Operation is not allowed in this context.
3、        虽然电子表格中已被删除的数据原来所在的行现在是空行,但无法将其删除,而且记录集将继续显示对应于这些空行的空记录。
针对这个问题,我们通常简单的做法就是清空字段的值,类似这样的写法:
UPDATE dept$@hsxls_link SET NAME = NULL, dept_no = NULL WHERE dept_no = 3;
当然,你要知道的是,这一行并没有真正删除掉,所以通常在select的时候要进行一定的筛选,例如:
SELECT * FROM dept$@hsxls_link WHERE dept_no IS NOT NULL;


__________________
技术为本.业务为纲  文化为本.管理为纲  ERP千里之行,始于足下
帖子总目录:http://www.itpub.net/442423.html
大家都来玩:http://www.pceggs.cn/pgComDefault.aspx?ID=6480286
只看该作者    顶部
离线 starhot
资深会员



精华贴数 0
个人空间 0
技术积分 1694 (975)
社区积分 23 (6973)
注册日期 2004-12-27
论坛徽章:0
      
      

发表于 2007-4-14 14:00 
蛮有意思的,谢谢分享!


只看该作者    顶部
离线 starhot
资深会员



精华贴数 0
个人空间 0
技术积分 1694 (975)
社区积分 23 (6973)
注册日期 2004-12-27
论坛徽章:0
      
      

发表于 2007-4-14 14:02 
只是不知道之前谈到的不安装客户端直接访问DB的方式是否有结果了,,,很想知道


只看该作者    顶部
离线 hphubei
版主


精华贴数 14
个人空间 0
技术积分 25287 (35)
社区积分 41950 (18)
注册日期 2004-5-8
论坛徽章:8
      
      

发表于 2007-4-14 17:19 
数据导入我都是通过SQL Server的DTS或者PL/SQL Developer


__________________
…………………………………………     用最少的悔恨面对过去     用最少的浪费面对现在     用最多的梦想面对未来…………………………………………
只看该作者    顶部
离线 huajhua
灵机一动


精华贴数 21
个人空间 0
技术积分 5001 (260)
社区积分 19 (7618)
注册日期 2004-5-20
论坛徽章:13
管理团队成员管理团队2006纪念徽章会员2007贡献徽章会员2006贡献徽章授权会员ERP板块每日发贴之星
      

发表于 2007-4-14 21:42 
不安装客户端直接访问DB的方式:没有


__________________
技术为本.业务为纲  文化为本.管理为纲  ERP千里之行,始于足下
帖子总目录:http://www.itpub.net/442423.html
大家都来玩:http://www.pceggs.cn/pgComDefault.aspx?ID=6480286
只看该作者    顶部
离线 sunnly
马儿


精华贴数 1
个人空间 0
技术积分 1725 (947)
社区积分 801 (1052)
注册日期 2006-2-26
论坛徽章:27
蓝色妖姬ITPUB新首页上线纪念徽章生肖徽章:马生肖徽章:马生肖徽章:马生肖徽章:马
生肖徽章:马生肖徽章:马生肖徽章:马生肖徽章:马  

发表于 2007-4-15 18:49 
有点意思,有空试试看,呵呵


__________________
Oracle开发技术交流
我的Blog

性格决定你的命运.
态度决定你的高度.
脑袋决定你的口袋.
只看该作者    顶部
离线 lveamy
爱君如梦



精华贴数 1
个人空间 0
技术积分 3232 (446)
社区积分 35 (5708)
注册日期 2005-1-12
论坛徽章:10
会员2007贡献徽章授权会员ITPUB新首页上线纪念徽章数据库板块每日发贴之星ERP板块每日发贴之星ERP板块每日发贴之星
ERP板块每日发贴之星ERP板块每日发贴之星数据库板块每日发贴之星ERP板块每日发贴之星  

发表于 2007-4-16 08:29 
谢谢分享/.................


__________________
你快乐..我快乐
只看该作者    顶部
离线 smilefish
超级打杂


精华贴数 1
个人空间 0
技术积分 3352 (429)
社区积分 1229 (808)
注册日期 2004-12-31
论坛徽章:34
生肖徽章2007版:蛇     
      

发表于 2007-4-16 09:34 
oracle sql  developer就可以不用装客户端而连上DB  


__________________
人为鱼肉 我为刀俎 :sun:
只看该作者    顶部
离线 cooler
高级会员


精华贴数 1
个人空间 0
技术积分 1970 (807)
社区积分 2775 (452)
注册日期 2004-7-21
论坛徽章:13
ITPUB元老奥运纪念徽章NBA2008季后赛纪念徽章NBA常规赛纪念章第18届世界杯(德国)纪念徽章会员2007贡献徽章
金色在线徽章授权会员2008北京奥运纪念徽章:游泳体育版块博采纪念徽章生肖徽章2007版:兔生肖徽章2007版:鸡

发表于 2007-4-16 10:10 
不错~~~


__________________
树欲静而风不止子欲养而亲不在
只看该作者    顶部
离线 asxsa
一般会员



精华贴数 0
个人空间 0
技术积分 128 (13594)
社区积分 3 (20964)
注册日期 2005-10-15
论坛徽章:0
      
      

发表于 2007-5-25 23:41 
现在DB服务器OS很少用Windows的, 最好能在Linux下访问


__________________
程序员 -> 高级程序员 -> 系统设计师 -> Oracle EBS 二次开发不是知道是退步还是进步
只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问