首先,创建外部表定义,然后将它引用到文件当中。此时文件必须存放在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')
)
;
然后,使用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
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"
;
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"
;
以上的例子可以为你提供一定的参考,你可以修改路径和外部表定义来满足你的实际情况。希望能够成为你的最终解决方案。