2

私の別のスレッドで、過去 3 か月のみを抽出する方法を尋ねました。ただし、過去 3 か月のデータを 1 つのテーブルからのみ抽出することができ、他のテーブルのすべてのデータを抽出しました。スキーマに複数のテーブルがあり、タイムスタンプの列名が異なります。

私の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');" 
4

1 に答える 1

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_DATENLS 依存であることを忘れないでください。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 日付リテラルを使用することをお勧めします。これは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
于 2015-10-16T05:59:41.633 に答える