如何在expdp中使用QUERY来仅提取最近3个月的数据

时间:2015-10-16 03:05:54

标签: oracle expdp

在我的另一个帖子中,我问过如何仅提取过去3个月。但是,我设法仅从一个表中提取过去3个月的数据,并提取其他表的所有数据。我的架构中有几个表,时间戳的列名不同。

在我的par文件中,我有以下QUERY但它没有用。我收到了ORA-00911错误消息。我想知道以下查询的语法是否正确/可能。

    QUERY=TABLE1,TABLE2:"where TABLE1_STARTTIME >= TO_DATE('01-AUG-2015','dd-mon-yyyy') and TABLE2_STARTIME >= TO_DATE('01-AUG-2015','dd-mon-yyyy');" 

1 个答案:

答案 0 :(得分:1)

  

QUERY = TABLE1,TABLE2:" where ... TO_DATE(' 01-AUG-2015',' dd-mon-yyyy');"

删除> QUERY 参数中的分号。

QUERY=TABLE1,TABLE2:"where TABLE1_STARTTIME >= TO_DATE('01-AUG-2015','dd-mon-yyyy') 
                     and TABLE2_STARTIME >= TO_DATE('01-AUG-2015','dd-mon-yyyy')" 

旁注:

与您的问题没有直接关系。但请记住 TO_DATE NLS依赖。您应指定 NLS_DATE_LANGUAGE ,否则您的查询可能会因其他nls_date_language而失败。

例如,

SQL> alter session set nls_date_language='FRENCH';

Session altered.

SQL> SELECT TO_DATE('01-AUG-2015','dd-mon-yyyy') FROM DUAL;
SELECT TO_DATE('01-AUG-2015','dd-mon-yyyy') FROM DUAL
               *
ERROR at line 1:
ORA-01843: not a valid month


SQL> SELECT TO_DATE('01-AUG-2015','dd-mon-yyyy', 'nls_date_language=ENGLISH') FROM DUAL;

TO_DATE('01
-----------
01-AO█T -15

如果您没有时间部分,我宁愿使用 ANSI Date literal NLS独立。它使用固定格式 YYYY-MM-DD

例如,

SQL> alter session set nls_date_language='FRENCH';

Session altered.

SQL> SELECT DATE '2015-08-01' FROM DUAL;

DATE'2015-0
-----------
01-AO█T -15

SQL> alter session set nls_date_language='AMERICAN';

Session altered.

SQL> SELECT DATE '2015-08-01' FROM DUAL;

DATE'2015
---------
01-AUG-15