Oracle中利用数据泵导出查询结果(一) 数据泵的QUERY功能

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

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

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

本栏目更多精彩内容:http://www.bianceng.cn/database/Oracle/

比如上述的查询结果就可以通过数据泵的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: Release10.2.0.3.0 - 64bit Production on星期日, 13 6月, 2010 19:52:28

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

Connected to: Oracle Database10gEnterprise Edition Release10.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

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

时间: 2024-12-31 01:38:37

Oracle中利用数据泵导出查询结果(一) 数据泵的QUERY功能的相关文章

ab表数据 插入c数据-特急!触发器中当新增1个表中数据,查询相关数据,把查询出来的数据插入另外一张表

问题描述 特急!触发器中当新增1个表中数据,查询相关数据,把查询出来的数据插入另外一张表 使用触发器,根据条件查询出a和b表中数据,插入到c表. create table a ( fid VARCHAR2(44), fname_l2 VARCHAR2(255),//名称 b_fid VARCHAR2(44),//b表的id fnumber NVARCHAR2(80) ); create table b ( fid VARCHAR2(44), fname_l2 VARCHAR2(255),//名称

Oracle中利用数据泵导出查询结果(二) 外部表的卸载功能

还是上一篇中的测试环境: 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 IN

oracle 中数据库完全导入导出:cmd命令行模式

Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可以把数据从远程数据库服务器导出到本地的dmp文件,imp命令可以把dmp文件从本地导入到远处的数据库服务器中. 利用这个功能可以构建两个相同的数据库,一个用来测试,一个用来正式使用. 执行环境:可以在SQLPLUS.EXE或者DOS(命令行)中执行, DOS中可以执行时由于 在oracle 8i 中 安装目录/ora81/BIN被设置为全局路径, 该目录下有EXP.EXE与IMP.EXE文件被用来执行导入导出.

sqlserver和oracle中对datetime进行条件查询的一点区别小结_数据库其它

首先,看一下sql server,之前我们都通过前台用户选择一个起始时间和一个结束时间(以日为最小单位),然后来作为条件进行查询,如果直接通过"between starttime and endtime"来作为条件的话,发现会自动将"2009-06-17"转化为" 2009-06-17 00:00:00",于是如下查询条件" between '2009-06-16' and '2009-06-17'",只能得到16日的数据,1

ASP.NET中利用存储过程实现模糊查询

asp.net|存储过程 一.建立存储过程 在MSSQL中的Northwind数据库中为employess表新建存储过程(作用按LastName进行模糊查询): CREATE PROCEDURE Employess_Sel @lastname nvarchar (20)ASselect lastname from Employees where lastname like '%' + @lastname + '%'GO 二.窗体设计 1.新建ASP.NET Web应用程序,命名为WebSql,选

ASP.NET中利用存储过程实现模糊查询_实用技巧

一.建立存储过程 在MSSQL中的Northwind数据库中为employess表新建存储过程(作用按LastName进行模糊查询): CREATE PROCEDURE Employess_Sel @lastname nvarchar (20)ASselect lastname from Employees where lastname like '%' + @lastname + '%'GO 二.窗体设计 1.新建ASP.NET Web应用程序,命名为WebSql,选择保存路径然后点击确定.

oracle中数据库的导入导出命令

 代码如下 复制代码 ORACLE_192.168.28.1 =   (DESCRIPTION =     (ADDRESS_LIST =       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.28.1)(PORT = 1521))     )     (CONNECT_DATA =       (SERVICE_NAME = oracle11)     )   ) ORACLE_192.168.28.2 =   (DESCRIPTION =    

Oracle中利用存储过程建表

Oracle中存储过程不可以执行DDL语句,但是我们可以利用动态sql语句来建立表格. 如下:   代码 create or replace procedure spCreateTestTableis    v_CreateString varchar2(1000);begin    declare        v_count number;    begin        v_count := 0;                select count(*)        into v_c

WebGIS项目中利用mysql控制点库进行千万条数据坐标转换时的分表分区优化方案

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 项目中有1000万条历史案卷,为某地方坐标系数据,我们的真实需求是将地方坐标系坐标反转成WGS84坐标,如果现在需要将其转换成百度坐标系数据.常规方案是先建立好整个该市的本地坐标和百度坐标之间的控制点库后再进行转换.但是在具体实施中发现转换特别慢,由于控制点库也有200多万条记录,大概一个点需要一秒钟才能转换完. 2.将Update变成Insert关键字段值