linux下数据泵导出,利用数据泵导出查询结果(一)

本文介绍了如何利用Oracle数据泵的QUERY功能导出特定查询结果。通过将查询语句转换为IN或EXISTS的形式,可以实现从T1和T2表中导出满足特定条件的数据。这种方法适用于查询的所有字段来自同一表,并且与其他表关联后不产生重复记录的情况。示例中展示了创建测试表、插入数据,然后使用数据泵导出满足条件的查询结果的过程。

在ITPUB上看到有人提出这个问题,能否利用数据泵导出一个查询结果。事实上数据泵还真的具有这个功能。

这一篇介绍数据泵的QUERY功能。

建立一个简单的测试环境:

SQL> CREATE TABLE T1

2  (ID NUMBER, NAME VARCHAR2(30));

Table created.

SQL> INSERT INTO T1

2  SELECT ROWNUM, TNAME

3  FROM TAB;

66 rows created.

SQL> CREATE TABLE T2

2  (ID NUMBER, NAME VARCHAR2(30));

Table created.

SQL> INSERT INTO T2

2  VALUES (1, 'A');

1 row created.

SQL> INSERT INTO T2

2  VALUES (2, 'B');

1 row created.

SQL> COMMIT;

Commit complete.

如果要导出T1和T2的查询结果,且满足两个条件,就可以考虑使用数据泵的QUERY功能。

第一个条件是查询的全部字段都来自同一张表;

第二个条件是其他表关联当前表字段是唯一的,换句话说,就是当前表和其他表关联后不会产生重复的记录。

SQL> SELECT T1.* FROM T1, T2

2  WHERE T1.ID = T2.ID;

ID NAME

---------- ------------------------------

1 CP_TEST_T

2 CELL

比如上述的查询结果就可以通过数据泵的QUERY参数来实现,首先对查询变形,变成IN或EXISTS的形式:

SQL> SELECT * FROM T1

2  WHERE ID IN

3  (SELECT T2.ID FROM T2 WHERE T2.ID = T1.ID);

ID NAME

---------- ------------------------------

1 CP_TEST_T

2 CELL

下面就可以进行导出了:

[oracle@yans1 ~]$ expdp test/test dumpfile=d_output:t1.dp tables=t1 query='T1:"WHERE ID IN (SELECT ID FROM T2 WHERE T2.ID = ID)"'

Export: Release 10.2.0.3.0 - 64bit Production on星期日, 13 6月, 2010 19:52:28

Copyright (c) 2003, 2005, Oracle.  All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production

With the Partitioning, OLAP and Data Mining options

Starting "TEST"."SYS_EXPORT_TABLE_01":  test/******** dumpfile=d_output:t1.dp tables=t1 query=T1:"WHERE ID IN (SELECT ID FROM T2 WHERE T2.ID = ID)"

Estimate in progress using BLOCKS method...

Processing object type TABLE_EXPORT/TABLE/TABLE_DATA

Total estimation using BLOCKS method: 128 KB

Processing object type TABLE_EXPORT/TABLE/TABLE

. . exported "TEST"."T1"                                 5.234 KB       2 rows

Master table "TEST"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded

******************************************************************************

Dump file set for TEST.SYS_EXPORT_TABLE_01 is:

/home/oracle/t1.dp

Job "TEST"."SYS_EXPORT_TABLE_01" successfully completed at 19:52:32

这种方法比较简单,但是最大的缺点就是限制条件太严格,尤其是所有字段完全来自都一张表,大多数情况都无法满足这个条件。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值