oracle查询文本,Oracle数据提到文本文档进行查询的方法

在数据库中我运行了以下的查询语句:

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

"

;

以上的例子可以为你提供一定的参考,你可以修改路径和外部表定义来满足你的实际情况。希望能够成为你的最终解决方案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值