sql >> データベース >  >> RDS >> Oracle

INSERTステートメントの有効な月ではありません

    日付またはタイムスタンプの列を設定しているトリガーがテーブルにない限り、エラースタック全体に何らかの兆候が見られますが、NLS_DATE_LANGUAGEのように聞こえます。 英語の月の省略形は期待していません。

    あなたが持っているものは英語で有効です:

    alter session set nls_timestamp_format = 'RR/MM/DD HH24:MI:SSXFF';
    alter session set nls_date_language ='ENGLISH';
    
    select to_timestamp('15-APR-14 01.36.58.803000000 PM',
      'DD-MON-RR HH.MI.SS.FF AM') as my_date
    from dual;
    
    MY_DATE                   
    ---------------------------
    14/04/15 13:36:58.803000000 
    

    ただし、セッションのデフォルトの日付言語がポーランド語(プロファイルから推測)の場合、このエラーが発生します-エラーメッセージは英語のままです:

    alter session set nls_date_language ='POLISH';
    
    select to_timestamp('15-APR-14 01.36.58.803000000 PM',
      'DD-MON-RR HH.MI.SS.FF AM') as my_date
    from dual;
    
    SQL Error: ORA-01843: not a valid month
    01843. 00000 -  "not a valid month"
    

    セッションを英語に設定したくない場合は、オプションの3番目のパラメーターをto_timestamp()に指定することで、特定のステートメントのセッションをオーバーライドできます。 :

    alter session set nls_date_language ='POLISH';
    
    select to_timestamp('15-APR-14 01.36.58.803000000 PM',
      'DD-MON-RR HH.MI.SS.FF AM',
      'NLS_DATE_LANGUAGE=ENGLISH') as my_date
    from dual;
    
    MY_DATE                   
    ---------------------------
    14/04/15 13:36:58.803000000 
    

    月名の代わりに月番号を使用するか、ANSIタイムスタンプリテラル構文を使用することで、この問題を完全に回避することもできます。

    select timestamp '2014-04-15 13:36:58.803' from dual;
    
    TIMESTAMP'2014-04-1513:36:58.803'
    ---------------------------------
    14/04/15 13:36:58.803000000       
    

    これらのメソッドはすべて、日付列でも機能します。 to_date() 関数は同じようにNLS設定の影響を受け、同じオプションの日付言語パラメーターがあります。




    1. APP_NAME()を使用して、SQLServerの現在のセッションのアプリケーション名を取得します

    2. Oracleを使用してDjangoで自動テストを作成する際のORA-65096エラーの修正

    3. テーブル行の編集GUIを使用してSQLServerテーブルに行を挿入する方法-SQLServer/TSQLチュートリアルパート101

    4. postgresqlで作成された新しいテーブルの権限をユーザーに付与します