问:在数据库中我运行了以下的查询语句: Select PLAN_ID, EL_ID, NIIN, ITEM_NAME, PROJECT_CD, CASE WHEN LCMC_DOC_NO IS NULL THEN MRODOC ELSE LCMC_DOC_NO END AS “DOCUMENT NUMBER” FROM EQLIST_VIEW WHERE PLAN_I……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
问:在数据库中我运行了以下的查询语句:
Select PLAN_ID, EL_ID, NIIN, ITEM_NAME, PROJECT_CD, CASE WHEN LCMC_DOC_NO IS NULL THEN MRODOC ELSE LCMC_DOC_NO END AS "DOCUMENT NUMBER" FROM EQLIST_VIEW WHERE PLAN_ID IN (736,1011) AND LCMC_DOC_NO IN ('W56HZV0327W501','W52H090313X006','W52H090314X026', 'W52H090314X027','W52H090318X049','W52H090320X003','W56HZV0351M012', 'W56HZV0351M032','W56HZV0351M035','W919AD0334L091','W919AD0334L092', 'W919AD0352L025','W919AD0358L012','W919AD0358L017','W919AD0353L020', 'W56HZV0350M001') ORDER BY NIIN, “DOCUMENT NUMBER” |
问题是这样的,现在有超过4000个DOC_NO,我想要抽取这些数据放到C盘上的一个文本文件当中。我试了好几种方法,但是系统一直出现第五行错误提示:“Syntax error near 'C'”
于是我重新写了一边查询:
Select PLAN_ID, EL_ID, NIIN, ITEM_NAME, PROJECT_CD, CASE WHEN LCMC_DOC_NO IS NULL THEN MRODOC ELSE LCMC_DOC_NO END AS "DOCUMENT NUMBER" FROM EQLIST_VIEW WHERE PLAN_ID IN (736,1011) AND LCMC_DOC_NO IN C:/Users/aj.moon/Desktop/TEMP/A5A_DOCNUM.TXT |
您能否提供一些好的建议?
答:你并没有说你在使用哪一个版本的Oracle数据库,那么我就先假设为Oracle 9i。第一个问题是你不能直接使用文本文件,首先你要做的是让这些数据在数据库内可用。你可以使用SQL*Loader来加载数据或者创建一个外部的表。在这里我就简单介绍一下第二种方法。
外部表可以允许Oracle查询存储在数据库之外的平面文件中的数据。SQL*Loader加载的格式化存储数据你都可以访问。针对外部表,你无法使用INSERT/UPDATE/DELETE操作,但是你可以在查询中使用它们。一旦你创建了外部表,你就可以在视图中使用它,并创建synonyms。通常情况下,使用外部表主要是为了进行ETL操作,它可以防止数据进入真实表。但是如果你打算频繁地查询外部表,就需要考虑将数据加载到真实表当中,因为外部表无法进行索引,性能将会受到比较大的影响。
首先,创建外部表定义,然后将它引用到文件当中。此时文件必须存放在Oracle可以访问的路径下,也就是说不能够放在本地磁盘,而是需要放在你的数据库服务器路径下。然后创建一个DIRECTORY对象,指向文件路径:
CREATE OR REPLACE DIRECTORY ext_tab_dir AS 'C:temp'; 然后,使用CREATE TABLE..ORGANIZATION EXTERNAL语句创建外部表元数据: CREATE TABLE docnum_ext ( doc_no varchar2(30) ) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir ACCESS PARAMETERS (FIELDS TERMINATED BY ',' ) LOCATION ('A5A_DOCNUM.TXT') ) ; |
由于你没有提供文本文件的具体格式,所以我就假设是用逗号隔开的一系列值。如果你有不一样的格式,那么就需要在定义中更改ACCESS PARAMETERS,具体参考Oracle官方文档。
创建好外部表之后,你可以用简单的查询进行测试:
SQL> SELECT * 2 FROM docnum_ext; DOC_NO ---------------------------- W56HZV0327W501 W52H090313X006 W52H090314X026 W52H090314X027 W52H090318X049 W52H090320X003 W56HZV0351M012 W56HZV0351M032 W56HZV0351M035 W919AD0334L091 W919AD0334L092 W919AD0352L025 W919AD0358L012 W919AD0358L017 W919AD0353L020 W56HZV0350M001 |
当表的功能正常时,你可以反向查询:
Select PLAN_ID, EL_ID, NIIN, ITEM_NAME, PROJECT_CD, CASE WHEN LCMC_DOC_NO IS NULL THEN MRODOC ELSE LCMC_DOC_NO END AS "DOCUMENT NUMBER" FROM EQLIST_VIEW WHERE PLAN_ID IN (736,1011) AND LCMC_DOC_NO IN (SELECT doc_no FROM docnum_ext) ORDER BY NIIN, "DOCUMENT NUMBER" ; |
以上的例子可以为你提供一定的参考,你可以修改路径和外部表定义来满足你的实际情况。希望能够成为你的最终解决方案。
作者
翻译
相关推荐
-
甲骨文自治数据库亮相 带来云计算新希望
早前甲骨文还不在云计算公司之列,而现在该公司正在迅速弥补其失去的时间。甲骨文的云计算核心是甲骨文自治数据库(O […]
-
2017年12月数据库流行度排行榜 定格岁末排名瞬间
数据库知识网站DB-engines最近更新的2017年12月份数据库流行度排名情况是否能提供更多的看点呢?TechTarget数据库网站将与您分享12月份的榜单排名情况,让我们拭目以待。
-
2017年11月数据库流行度排行榜 半数以上数据库积分减少
数据库知识网站DB-engines更新了2016年11月份的数据库流行度排行榜。TechTarget数据库网站将与您一同关注11月份的榜单排名情况。
-
控制合约 不再畏惧Oracle
许多公司都与Oracle有无限制授权协议,他们害怕离开这个协议,所以就证明他们在使用Oracle的软件,即使因为需求单独购买部分授权许可也可能总体是省钱的。