Query on DATE  ORA-01843

Please see
select to_date(to_char('01-01-2006 10:31:29')) from dual
the query is not working
Sumit Arora
Thanx in advance

select to_date('01-01-2006 10:31:29', 'DD-MM-YYYY HH24:MI:SS') from dual ;

Similar Messages

  • Query with error: ORA-01843: not a valid month

    Hi,
    I have a problem with a query. I have modified a query that before worked but not now!
    The correct original query was:
    SELECT  rtrim('Cambio di: '
            || (CASE WHEN nvl(A.CODICE_EMITTENTE ,' ') <> nvl(B.CODICE_EMITTENTE ,' ') THEN 'Codice emittente, ' ELSE '' END)
            || (CASE WHEN nvl(A.DESCRIZIONE_TITOLO,' ') <> nvl(B.DESCRIZIONE_TITOLO,' ') THEN 'Descrizione titolo, ' ELSE '' END)
            || (CASE WHEN nvl(A.SOTTOSTANTE,' ') <> nvl(B.SOTTOSTANTE,' ') THEN 'Sottostante, ' ELSE '' END)
            || (CASE WHEN nvl(A.TIPO_SOTTOSTANTE, ' ') <> nvl(B.TIPO_SOTTOSTANTE,' ') THEN 'Tipo sottostante, ' ELSE '' END)
            || (CASE WHEN nvl(A.CEDOLA_LORDA_CORRENTE, 0) <> nvl(B.CEDOLA_LORDA_CORRENTE, 0) THEN 'Cedola lorda corrente, ' ELSE '' END)
            || (CASE WHEN nvl(A.FREQUENZA_CEDOLA, ' ') <> nvl(B.FREQUENZA_CEDOLA, ' ') THEN 'Frequenza cedola, ' ELSE '' END)
            || (CASE WHEN nvl(A.DATA_INIZIO_FACOLTA_CALL, '31-Dec-2999') <> nvl(B.DATA_INIZIO_FACOLTA_CALL, '31-Dec-2999') THEN 'Data inizio facoltà call, ' ELSE '' END)
            || (CASE WHEN nvl(A.DATA_FINE_FACOLTA_CALL, '31-Dec-2999') <> nvl(B.DATA_FINE_FACOLTA_CALL, '31-Dec-2999') THEN 'Data fine facoltà call, ' ELSE '' END)
            || (CASE WHEN nvl(A.DATA_INIZIO_FACOLTA_PUT,'31-Dec-2999') <> nvl(B.DATA_INIZIO_FACOLTA_PUT,'31-Dec-2999') THEN 'Data inizio facoltà put, ' ELSE '' END)
            || (CASE WHEN nvl(A.DATA_FINE_FACOLTA_PUT,'31-Dec-2999') <> nvl(B.DATA_FINE_FACOLTA_PUT,'31-Dec-2999') THEN 'Data fine facoltà put, ' ELSE '' END)
            || (CASE WHEN nvl(A.AMMONTARE_EMESSO, 0) <> nvl(B.AMMONTARE_EMESSO, 0) THEN 'Ammontare emesso, ' ELSE '' END)
            || (CASE WHEN nvl(A.DATA_PRIMO_GODIMENTO, '31-Dec-2999') <> nvl(B.DATA_PRIMO_GODIMENTO, '31-Dec-2999') THEN 'Data primo godimento, ' ELSE '' END)
            || (CASE WHEN nvl(A.DATA_SCADENZA, '31-Dec-2999') <> nvl(B.DATA_SCADENZA, '31-Dec-2999') THEN 'Data scadenza, ' ELSE '' END)
            || (CASE WHEN nvl(A.PRIMO_PREZZO_EMISSIONE, 0) <> nvl(B.PRIMO_PREZZO_EMISSIONE, 0) THEN 'Primo prezzo di emissione, ' ELSE '' END)
            || (CASE WHEN nvl(A.MODALITA_RIMBORSO, 0) <> nvl(B.MODALITA_RIMBORSO, 0) THEN 'Modalità rimborso, ' ELSE '' END)
            || (CASE WHEN nvl(A.SUBORDINAZIONE, ' ') <> nvl(B.SUBORDINAZIONE, ' ') THEN 'Subordinazione, ' ELSE '' END)
            || (CASE WHEN nvl(A.DIV_EMIS_CODE, 0) <> nvl(B.DIV_EMIS_CODE, 0) THEN 'Codice divisa di emissione, ' ELSE '' END)
            || (CASE WHEN nvl(A.DIV_EMIS, ' ') <> nvl(B.DIV_EMIS, ' ') THEN 'Divisa di emissione, ' ELSE '' END)
            ,', ') TIPO_VARIAZIONE,
           A.ISICOD ,
           A.CODICE_EMITTENTE AS EMIT_COD_T, B.CODICE_EMITTENTE AS EMIT_COD_T1, 
           A.DESCRIZIONE_TITOLO AS DESC_TITOLO_T, B.DESCRIZIONE_TITOLO AS DESC_TITOLO_T1,
           A.SOTTOSTANTE AS SOTTOSTANTE_T, B.SOTTOSTANTE AS SOTTOSTANTE_T1,
           A.TIPO_SOTTOSTANTE AS TIPO_SOTTOSTANTE_T, B.TIPO_SOTTOSTANTE AS TIPO_SOTTOSTANTE_T1,
           A.CEDOLA_LORDA_CORRENTE AS CEDOLA_LORDA_CORRENTE_T, B.CEDOLA_LORDA_CORRENTE AS CEDOLA_LORDA_CORRENTE_T1,
           A.FREQUENZA_CEDOLA AS FREQUENZA_CEDOLA_T, B.FREQUENZA_CEDOLA AS FREQUENZA_CEDOLA_T1,
           A.DATA_INIZIO_FACOLTA_CALL AS DATA_INIZIO_FACOLTA_CALL_T, B.DATA_INIZIO_FACOLTA_CALL AS DATA_INIZIO_FACOLTA_CALL_T1,
           A.DATA_FINE_FACOLTA_CALL AS DATA_FINE_FACOLTA_CALL_T, B.DATA_FINE_FACOLTA_CALL AS DATA_FINE_FACOLTA_CALL_T1,
           A.DATA_INIZIO_FACOLTA_PUT AS DATA_INIZIO_FACOLTA_PUT_T, B.DATA_INIZIO_FACOLTA_PUT AS DATA_INIZIO_FACOLTA_PUT_T1,
           A.DATA_FINE_FACOLTA_PUT AS DATA_FINE_FACOLTA_PUT_T, B.DATA_FINE_FACOLTA_PUT AS DATA_FINE_FACOLTA_PUT_T1,
           A.AMMONTARE_EMESSO AS AMMONTARE_EMESSO_T, B.AMMONTARE_EMESSO AS AMMONTARE_EMESSO_T1,
           A.DATA_PRIMO_GODIMENTO AS DATA_PRIMO_GODIMENTO_T,  B.DATA_PRIMO_GODIMENTO AS DATA_PRIMO_GODIMENTO_T1,
           A.DATA_SCADENZA AS DATA_SCADENZA_T, B.DATA_SCADENZA AS DATA_SCADENZA_T1,
           A.PRIMO_PREZZO_EMISSIONE AS PRIMO_PREZZO_EMISSIONE_T, B.PRIMO_PREZZO_EMISSIONE AS PRIMO_PREZZO_EMISSIONE_T1,
           A.MODALITA_RIMBORSO AS MODALITA_RIMBORSO_T, B.MODALITA_RIMBORSO AS MODALITA_RIMBORSO_T1,
           A.SUBORDINAZIONE AS SUBORDINAZIONE_T, B.SUBORDINAZIONE AS SUBORDINAZIONE_T1,
           A.DIV_EMIS_CODE AS DIV_EMIS_CODE_T, B.DIV_EMIS_CODE AS DIV_EMIS_CODE_T1,
           A.DIV_EMIS AS DIV_EMIS_T, B.DIV_EMIS AS DIV_EMIS_T1,
           A.START_DATE AS DATA_AGG_T, B.START_DATE AS DATA_AGG_T1
    FROM SPR_KLERS_ISD A, SPR_KLERS_ISD B
    WHERE A.START_DATE=TRUNC(SYSDATE)
          AND A.ISICOD=B.ISICOD
          AND B.START_DATE = decode(trim(to_char(sysdate, 'Day')), 'Monday',trunc(sysdate-3), trunc(sysdate-1))
          AND (nvl(A.CODICE_EMITTENTE,' ') != nvl(B.CODICE_EMITTENTE,' ')
            OR
            nvl(A.DESCRIZIONE_TITOLO,' ') != nvl(B.DESCRIZIONE_TITOLO,' ')
            OR
            nvl(A.SOTTOSTANTE,' ') != nvl(B.SOTTOSTANTE,' ')
            OR
            nvl(A.TIPO_SOTTOSTANTE, ' ') != nvl(B.TIPO_SOTTOSTANTE,' ')
            OR
            nvl(A.CEDOLA_LORDA_CORRENTE, 0) != nvl(B.CEDOLA_LORDA_CORRENTE, 0)
            OR
            nvl(A.FREQUENZA_CEDOLA, ' ') != nvl(B.FREQUENZA_CEDOLA, ' ')
            OR
            nvl(A.DATA_INIZIO_FACOLTA_CALL, '31-Dec-2999') != nvl(B.DATA_INIZIO_FACOLTA_CALL, '31-Dec-2999')
            OR
            nvl(A.DATA_FINE_FACOLTA_CALL, '31-Dec-2999') != nvl(B.DATA_FINE_FACOLTA_CALL, '31-Dec-2999')
            OR
            nvl(A.DATA_INIZIO_FACOLTA_PUT,'31-Dec-2999') != nvl(B.DATA_INIZIO_FACOLTA_PUT,'31-Dec-2999')
            OR
            nvl(A.DATA_FINE_FACOLTA_PUT,'31-Dec-2999') != nvl(B.DATA_FINE_FACOLTA_PUT,'31-Dec-2999')
            OR
            nvl(A.AMMONTARE_EMESSO, 0) != nvl(B.AMMONTARE_EMESSO, 0)
            OR
            nvl(A.DATA_PRIMO_GODIMENTO, '31-Dec-2999') != nvl(B.DATA_PRIMO_GODIMENTO, '31-Dec-2999')
            OR
            nvl(A.DATA_SCADENZA, '31-Dec-2999') != nvl(B.DATA_SCADENZA, '31-Dec-2999')
            OR
            nvl(A.PRIMO_PREZZO_EMISSIONE, 0) != nvl(B.PRIMO_PREZZO_EMISSIONE, 0)
            OR
            nvl(A.MODALITA_RIMBORSO, 0) != nvl(B.MODALITA_RIMBORSO, 0)
            OR
            nvl(A.SUBORDINAZIONE, ' ') != nvl(B.SUBORDINAZIONE, ' ')
            OR
            nvl(A.DIV_EMIS_CODE, 0) != nvl(B.DIV_EMIS_CODE, 0)
            OR
            nvl(A.DIV_EMIS, ' ') != nvl(B.DIV_EMIS, ' '))The new query that not works is:
    SELECT  rtrim('Cambio di: '
            || (CASE WHEN nvl(A.CODICE_EMITTENTE ,' ') <> nvl(B.CODICE_EMITTENTE ,' ') THEN 'Codice emittente, ' ELSE '' END)
            || (CASE WHEN nvl(A.DESCRIZIONE_TITOLO,' ') <> nvl(B.DESCRIZIONE_TITOLO,' ') THEN 'Descrizione titolo, ' ELSE '' END)
            || (CASE WHEN nvl(A.SOTTOSTANTE,' ') <> nvl(B.SOTTOSTANTE,' ') THEN 'Sottostante, ' ELSE '' END)
            || (CASE WHEN nvl(A.TIPO_SOTTOSTANTE, ' ') <> nvl(B.TIPO_SOTTOSTANTE,' ') THEN 'Tipo sottostante, ' ELSE '' END)
            || (CASE WHEN nvl(A.CEDOLA_LORDA_CORRENTE, 0) <> nvl(B.CEDOLA_LORDA_CORRENTE, 0) THEN 'Cedola lorda corrente, ' ELSE '' END)
            || (CASE WHEN nvl(A.FREQUENZA_CEDOLA, ' ') <> nvl(B.FREQUENZA_CEDOLA, ' ') THEN 'Frequenza cedola, ' ELSE '' END)
            || (CASE WHEN nvl(A.DATA_INIZIO_FACOLTA_CALL, '31-Dec-2999') <> nvl(B.DATA_INIZIO_FACOLTA_CALL, '31-Dec-2999') THEN 'Data inizio facoltà call, ' ELSE '' END)
            || (CASE WHEN nvl(A.DATA_FINE_FACOLTA_CALL, '31-Dec-2999') <> nvl(B.DATA_FINE_FACOLTA_CALL, '31-Dec-2999') THEN 'Data fine facoltà call, ' ELSE '' END)
            || (CASE WHEN nvl(A.DATA_INIZIO_FACOLTA_PUT,'31-Dec-2999') <> nvl(B.DATA_INIZIO_FACOLTA_PUT,'31-Dec-2999') THEN 'Data inizio facoltà put, ' ELSE '' END)
            || (CASE WHEN nvl(A.DATA_FINE_FACOLTA_PUT,'31-Dec-2999') <> nvl(B.DATA_FINE_FACOLTA_PUT,'31-Dec-2999') THEN 'Data fine facoltà put, ' ELSE '' END)
            || (CASE WHEN nvl(A.AMMONTARE_EMESSO, 0) <> nvl(B.AMMONTARE_EMESSO, 0) THEN 'Ammontare emesso, ' ELSE '' END)
            || (CASE WHEN nvl(A.DATA_PRIMO_GODIMENTO, '31-Dec-2999') <> nvl(B.DATA_PRIMO_GODIMENTO, '31-Dec-2999') THEN 'Data primo godimento, ' ELSE '' END)
            || (CASE WHEN nvl(A.DATA_SCADENZA, '31-Dec-2999') <> nvl(B.DATA_SCADENZA, '31-Dec-2999') THEN 'Data scadenza, ' ELSE '' END)
            || (CASE WHEN nvl(A.PRIMO_PREZZO_EMISSIONE, 0) <> nvl(B.PRIMO_PREZZO_EMISSIONE, 0) THEN 'Primo prezzo di emissione, ' ELSE '' END)
            || (CASE WHEN nvl(A.MODALITA_RIMBORSO, 0) <> nvl(B.MODALITA_RIMBORSO, 0) THEN 'Modalità rimborso, ' ELSE '' END)
            || (CASE WHEN nvl(A.SUBORDINAZIONE, ' ') <> nvl(B.SUBORDINAZIONE, ' ') THEN 'Subordinazione, ' ELSE '' END)
            || (CASE WHEN nvl(A.DIV_EMIS_CODE, 0) <> nvl(B.DIV_EMIS_CODE, 0) THEN 'Codice divisa di emissione, ' ELSE '' END)
            || (CASE WHEN nvl(A.DIV_EMIS, ' ') <> nvl(B.DIV_EMIS, ' ') THEN 'Divisa di emissione, ' ELSE '' END)
            ,', ') TIPO_VARIAZIONE,
           A.ISICOD ,
           A.CODICE_EMITTENTE AS EMIT_COD_T, B.CODICE_EMITTENTE AS EMIT_COD_T1, 
           A.DESCRIZIONE_TITOLO AS DESC_TITOLO_T, B.DESCRIZIONE_TITOLO AS DESC_TITOLO_T1,
           A.SOTTOSTANTE AS SOTTOSTANTE_T, B.SOTTOSTANTE AS SOTTOSTANTE_T1,
           A.TIPO_SOTTOSTANTE AS TIPO_SOTTOSTANTE_T, B.TIPO_SOTTOSTANTE AS TIPO_SOTTOSTANTE_T1,
           A.CEDOLA_LORDA_CORRENTE AS CEDOLA_LORDA_CORRENTE_T, B.CEDOLA_LORDA_CORRENTE AS CEDOLA_LORDA_CORRENTE_T1,
           A.FREQUENZA_CEDOLA AS FREQUENZA_CEDOLA_T, B.FREQUENZA_CEDOLA AS FREQUENZA_CEDOLA_T1,
           A.DATA_INIZIO_FACOLTA_CALL AS DATA_INIZIO_FACOLTA_CALL_T, B.DATA_INIZIO_FACOLTA_CALL AS DATA_INIZIO_FACOLTA_CALL_T1,
           A.DATA_FINE_FACOLTA_CALL AS DATA_FINE_FACOLTA_CALL_T, B.DATA_FINE_FACOLTA_CALL AS DATA_FINE_FACOLTA_CALL_T1,
           A.DATA_INIZIO_FACOLTA_PUT AS DATA_INIZIO_FACOLTA_PUT_T, B.DATA_INIZIO_FACOLTA_PUT AS DATA_INIZIO_FACOLTA_PUT_T1,
           A.DATA_FINE_FACOLTA_PUT AS DATA_FINE_FACOLTA_PUT_T, B.DATA_FINE_FACOLTA_PUT AS DATA_FINE_FACOLTA_PUT_T1,
           A.AMMONTARE_EMESSO AS AMMONTARE_EMESSO_T, B.AMMONTARE_EMESSO AS AMMONTARE_EMESSO_T1,
           A.DATA_PRIMO_GODIMENTO AS DATA_PRIMO_GODIMENTO_T,  B.DATA_PRIMO_GODIMENTO AS DATA_PRIMO_GODIMENTO_T1,
           A.DATA_SCADENZA AS DATA_SCADENZA_T, B.DATA_SCADENZA AS DATA_SCADENZA_T1,
           A.PRIMO_PREZZO_EMISSIONE AS PRIMO_PREZZO_EMISSIONE_T, B.PRIMO_PREZZO_EMISSIONE AS PRIMO_PREZZO_EMISSIONE_T1,
           A.MODALITA_RIMBORSO AS MODALITA_RIMBORSO_T, B.MODALITA_RIMBORSO AS MODALITA_RIMBORSO_T1,
           A.SUBORDINAZIONE AS SUBORDINAZIONE_T, B.SUBORDINAZIONE AS SUBORDINAZIONE_T1,
           A.DIV_EMIS_CODE AS DIV_EMIS_CODE_T, B.DIV_EMIS_CODE AS DIV_EMIS_CODE_T1,
           A.DIV_EMIS AS DIV_EMIS_T, B.DIV_EMIS AS DIV_EMIS_T1,
           A.START_DATE AS DATA_AGG_T, B.START_DATE AS DATA_AGG_T1
    FROM SPR_KLERS_ISD A, SPR_KLERS_ISD B
    WHERE A.START_DATE=TRUNC(SYSDATE)
          AND A.ISICOD=B.ISICOD
          AND B.END_DATE = TRUNC(SYSDATE)
          AND (nvl(A.CODICE_EMITTENTE,' ') != nvl(B.CODICE_EMITTENTE,' ')
            OR
            nvl(A.DESCRIZIONE_TITOLO,' ') != nvl(B.DESCRIZIONE_TITOLO,' ')
            OR
            nvl(A.SOTTOSTANTE,' ') != nvl(B.SOTTOSTANTE,' ')
            OR
            nvl(A.TIPO_SOTTOSTANTE, ' ') != nvl(B.TIPO_SOTTOSTANTE,' ')
            OR
            nvl(A.CEDOLA_LORDA_CORRENTE, 0) != nvl(B.CEDOLA_LORDA_CORRENTE, 0)
            OR
            nvl(A.FREQUENZA_CEDOLA, ' ') != nvl(B.FREQUENZA_CEDOLA, ' ')
            OR
            nvl(A.DATA_INIZIO_FACOLTA_CALL, '31-Dec-2999') != nvl(B.DATA_INIZIO_FACOLTA_CALL, '31-Dec-2999')
            OR
            nvl(A.DATA_FINE_FACOLTA_CALL, '31-Dec-2999') != nvl(B.DATA_FINE_FACOLTA_CALL, '31-Dec-2999')
            OR
            nvl(A.DATA_INIZIO_FACOLTA_PUT,'31-Dec-2999') != nvl(B.DATA_INIZIO_FACOLTA_PUT,'31-Dec-2999')
            OR
            nvl(A.DATA_FINE_FACOLTA_PUT,'31-Dec-2999') != nvl(B.DATA_FINE_FACOLTA_PUT,'31-Dec-2999')
            OR
            nvl(A.AMMONTARE_EMESSO, 0) != nvl(B.AMMONTARE_EMESSO, 0)
            OR
            nvl(A.DATA_PRIMO_GODIMENTO, '31-Dec-2999') != nvl(B.DATA_PRIMO_GODIMENTO, '31-Dec-2999')
            OR
            nvl(A.DATA_SCADENZA, '31-Dec-2999') != nvl(B.DATA_SCADENZA, '31-Dec-2999')
            OR
            nvl(A.PRIMO_PREZZO_EMISSIONE, 0) != nvl(B.PRIMO_PREZZO_EMISSIONE, 0)
            OR
            nvl(A.MODALITA_RIMBORSO, 0) != nvl(B.MODALITA_RIMBORSO, 0)
            OR
            nvl(A.SUBORDINAZIONE, ' ') != nvl(B.SUBORDINAZIONE, ' ')
            OR
            nvl(A.DIV_EMIS_CODE, 0) != nvl(B.DIV_EMIS_CODE, 0)
            OR
            nvl(A.DIV_EMIS, ' ') != nvl(B.DIV_EMIS, ' '))where I have changed only this:
    B.START_DATE = decode(trim(to_char(sysdate, 'Day')), 'Monday',trunc(sysdate-3), trunc(sysdate-1)) --------->AND B.END_DATE = TRUNC(SYSDATE)
    Both START_DATE and END_DATE are date filds.
    When I execute the second query I receive this:
    ORA-01843: not a valid monthin many ponts of the query that change every time I execute the query, why this behaviour?
    How can I solve?
    Thanks, bye bye.

    Could you execute the following query and post the output.
    select * from nls_session_parameters where parameter = 'NLS_DATE_FORMAT';
    select sysdate from dual;Also what are the datatypes for these columns
    >
    nvl(A.DATA_INIZIO_FACOLTA_CALL, '31-Dec-2999') != nvl(B.DATA_INIZIO_FACOLTA_CALL, '31-Dec-2999')
    OR
    nvl(A.DATA_FINE_FACOLTA_CALL, '31-Dec-2999') != nvl(B.DATA_FINE_FACOLTA_CALL, '31-Dec-2999')
    OR
    nvl(A.DATA_INIZIO_FACOLTA_PUT,'31-Dec-2999') != nvl(B.DATA_INIZIO_FACOLTA_PUT,'31-Dec-2999')
    OR
    nvl(A.DATA_FINE_FACOLTA_PUT,'31-Dec-2999') != nvl(B.DATA_FINE_FACOLTA_PUT,'31-Dec-2999')
    OR
    nvl(A.AMMONTARE_EMESSO, 0) != nvl(B.AMMONTARE_EMESSO, 0)
    OR
    nvl(A.DATA_PRIMO_GODIMENTO, '31-Dec-2999') != nvl(B.DATA_PRIMO_GODIMENTO, '31-Dec-2999')
    OR
    nvl(A.DATA_SCADENZA, '31-Dec-2999') != nvl(B.DATA_SCADENZA, '31-Dec-2999')
    >
    I hope you know anything given in single quotes is a string and not a date.
    Regards
    Raj

  • Unable to compare date "ORA-01843: not a valid month"

    Hello All,
    I am trying to fire below query but it is failing with error. Please suggest.
    SELECT column_name FROM table_name WHERE start_time < '01/01/2011 00:00:00 AM';
    ORA-01843: not a valid month
    In table the start_time is stored in 2/16/2013 8:31:01 PM format.
    Regards,
    Ankit
    Edited by: 982193 on Mar 11, 2013 6:32 AM

    Hi, Ankit,
    982193 wrote:
    Hello All,
    I am trying to fire below query but it is failing with error. Please suggest.Whenever you have a problem, please post a little sample data (CREATE TABLE and INSERT statements, relevant columns only) from all tables involved, so that the people who want to help you can re-create the problem and test their ideas.
    Also post the results you want from that data, and an explanation of how you get those results from that data, with specific examples.
    Always say which version of Oracle you're using (for example, 11.2.0.2.0).
    See the forum FAQ {message:id=9360002}
    SELECT column_name FROM table_name WHERE start_time < '01/01/2011 00:00:00 AM';Use \ tags, as explained in the forum FAQ, so that this site won't garble your messages so much.
    ORA-01843: not a valid month
    In table the start_time is stored in 2/16/2013 8:31:01 PM format. If start_time is a DATE (or a TIMESTAMP) then it is not stored in that format, or any other format you would recognize.  Regardless of what the format is, don't try to compare a DATE with a VARCHAR2, such as '01/01/2011 00:00:00 AM'.  Use TO_DATE to convert the VARCHAR2 to a DATE.  For exampleWHERE start_time < TO_DATE ( '01/01/2011 12:00:00 AM'
                   , 'MM/DD/YYYY HH:MI:SS AM'
    If you're using AM in a time, then 0 is not a possible hour.  The hours are 12, 1, 2, ..., 11 when using AM or PM.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

  • ORA-01843: not a valid month, external table select fails on date column

    Hi,
    I created an external table as follows:
    CREATE OR REPLACE DIRECTORY sales_feeds AS '/backup/oracle/feeds';
    Directory created.
    CREATE TABLE salesfeed_external_table
              PROD_ID               NUMBER
            , CUST_ID               NUMBER
            , TIME_ID               DATE
            , CHANNEL_ID            NUMBER
            , PROMO_ID              NUMBER
            , QUANTITY_SOLD         NUMBER(10,2)
            , AMOUNT_SOLD           NUMBER(10,2)
    ORGANIZATION EXTERNAL
            TYPE ORACLE_LOADER
            DEFAULT DIRECTORY sales_feeds
            ACCESS PARAMETERS
                    RECORDS DELIMITED BY newline
                    FIELDS TERMINATED BY ','
            LOCATION ('salesfeed.dat')
    REJECT LIMIT 0
    Table created.I then create that external flat file salesfeed.dat as folows
    set echo off
    set feedback off
    set linesize 100
    set pagesize 0
    set head off
    set sqlprompt ''
    set trimspool on
    spool on
    spool /backup/oracle/feeds/salesfeed.dat
    select PROD_ID||','||CUST_ID||','||TIME_ID||','||CHANNEL_ID||','||PROMO_ID||','||QUANTITY_SOLD||','||AMOUNT_SOLD
    FROM salesfeed where rownum = 1;
    spool off
    exit
    cat salesfeed.dat
    18,3131,21/03/1998 00:00:00,3,999,1,2600.76Note only one row at the moment (diagonising)
    Try to read it
    select * from salesfeed_external_table
    ERROR at line 1:
    ORA-29913: error in executing ODCIEXTTABLEFETCH callout
    ORA-30653: reject limit reachedThe log shows:
    cat SALESFEED_EXTERNAL_TABLE_1302.log
    LOG file opened at 11/24/11 12:16:02
    Field Definitions for table SALESFEED_EXTERNAL_TABLE
      Record format DELIMITED BY NEWLINE
      Data in file has same endianness as the platform
      Rows with all null fields are accepted
      Fields in Data Source:
        PROD_ID                         CHAR (255)
          Terminated by ","
          Trim whitespace same as SQL Loader
        CUST_ID                         CHAR (255)
          Terminated by ","
          Trim whitespace same as SQL Loader
        TIME_ID                         CHAR (255)
          Terminated by ","
          Trim whitespace same as SQL Loader
        CHANNEL_ID                      CHAR (255)
          Terminated by ","
          Trim whitespace same as SQL Loader
        PROMO_ID                        CHAR (255)
          Terminated by ","
          Trim whitespace same as SQL Loader
        QUANTITY_SOLD                   CHAR (255)
          Terminated by ","
          Trim whitespace same as SQL Loader
        AMOUNT_SOLD                     CHAR (255)
          Terminated by ","
          Trim whitespace same as SQL Loader
    error processing column TIME_ID in row 1 for datafile /backup/oracle/feeds/salesfeed.dat
    ORA-01843: not a valid monthI checked my nls date format etc:
    select * from nls_session_parameters;
    PARAMETER                      VALUE
    NLS_LANGUAGE                   ENGLISH
    NLS_TERRITORY                  UNITED KINGDOM
    NLS_CURRENCY                   £
    NLS_ISO_CURRENCY               UNITED KINGDOM
    NLS_NUMERIC_CHARACTERS         .,
    NLS_CALENDAR                   GREGORIAN
    NLS_DATE_FORMAT                DD/MM/YYYY HH24:MI:SS
    NLS_DATE_LANGUAGE              ENGLISH
    NLS_SORT                       BINARY
    NLS_TIME_FORMAT                HH24.MI.SSXFF
    NLS_TIMESTAMP_FORMAT           DD-MON-RR HH24.MI.SSXFF
    NLS_TIME_TZ_FORMAT             HH24.MI.SSXFF TZR
    NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH24.MI.SSXFF TZR
    NLS_DUAL_CURRENCY              ¤
    NLS_COMP                       BINARY
    NLS_LENGTH_SEMANTICS           BYTE
    NLS_NCHAR_CONV_EXCP            FALSEAny ideas?
    Thanks,
    Mich
    Edited by: Mich Talebzadeh on 24-Nov-2011 04:19

    Thanks
    The following now works
    CREATE TABLE salesfeed_external_table
              PROD_ID               NUMBER
            , CUST_ID               NUMBER
            , TIME_ID               DATE
            , CHANNEL_ID            NUMBER
            , PROMO_ID              NUMBER
            , QUANTITY_SOLD         NUMBER(10,2)
            , AMOUNT_SOLD           NUMBER(10,2)
    ORGANIZATION EXTERNAL
            TYPE ORACLE_LOADER
            DEFAULT DIRECTORY sales_feeds
            ACCESS PARAMETERS
                    RECORDS DELIMITED BY newline
                    FIELDS TERMINATED BY ','
                    MISSING FIELD VALUES ARE NULL
                    (         PROD_ID
                            , CUST_ID
                            , TIME_ID DATE  'dd/mm/yyyy HH24:MI:SS'
                            , CHANNEL_ID
                            , PROMO_ID
                            , QUANTITY_SOLD
                            , AMOUNT_SOLD
            LOCATION ('salesfeed.dat')
    REJECT LIMIT 0
    select * from salesfeed_external_table;
       PROD_ID    CUST_ID TIME_ID             CHANNEL_ID   PROMO_ID QUANTITY_SOLD AMOUNT_SOLD
            18       3131 21/03/1998 00:00:00          3        999             1     2600.76Regards,
    Mich

  • Regarding ORA-12801,ORA-01843 error

    Hi all,
    When I am running the mapping I am getting the
    ORA-12801: error signaled in parallel query server P079
    ORA-01843: not a valid month error
    My mapping was validated and deployed suceesfully.
    Please give me the suggestions.
    Thanks,
    Venkat

    Is the source field a date field or a varchar? Sounds like you are hitting a source data error.
    Try grabbing the insert (or merge, or whatever) statement from the mapping and running it on its own. If that fails with the same error, then try running the select portion of the statement to debug for the error.
    Assuming that you are using a to_Date function and if you are having real trouble finding the data error, you at least know which table the field is being sourced from. Run a little test - something like:
    declare
      cursor curs is select the_source_field from the_source_table;
    begin
      for rec in curs loop
         declare
            dateval date
         begin
            dateval := to_Date(rec.the_source_field,'yyyymmdd');   --or whatever format mask it is you are using
         exception
             when others then
                 dbms_output.put_line('FAILED TO_DATE ON SOURCEVAL: '||rec.the_source_field||' with error: '||substr(sqlerrm,1,150));
         end;
      end loop;
    end;Once you know the problems with the data then you can consider how best to deal with them.
    Cheers,
    Mike

  • Using Oracle OLE DB provider (with ADO) generates error: ORA-01843 while using date

    Were using OLE DB provider in order to connect to our Oracle 9i database. When executing the following query in a SQL Plus window I will get the correct results:
    SELECT gum_seu_syo_id, seu_userid, seu_first_name, seu_last_name
    From group_user_mapping, security_users
    Where gum_seu_syo_id = seu_syo_id
    and gum_term_date > '8/19/2002'
    and gum_seg_syo_id = 11
    However if will execute the same query from the our application (VB using ADO) I will get the following error:
    ORA-01843: Not a valid month
    Checking with our Oracle DBA we made sure my registry is correct and includes the correct format under HEKY_LOCAL_MACHINE\SOFTWARE\ORACLE\ORACLE_HOME,
    where the key is NLS_DATE_FORMAT (of type REG_EXPAND_SZ) with the value:
    MM/DD/YYYY HH:MI:SS AM
    I also run the following query in a SQL Plus window:
    select sysdate from dual;
    and got the following result:
    08/19/2002 10:27:20 AM
    which shows that the data format is correct.
    Trying to switch between the month and day in the query (put '19/8/2002') worked from the application but generated ORA-01843: Not a valid month in the SQL Plus window.
    Any ideas?

    try using
    to_char function
    for eg.
    select * from emp where to_char(hiredate,'dd/mm/yy') > '20/3/83'.
    Jagriti

  • ORA-01843: not a valid month . Receive this error when running report in reporting services but not when running query in BIDS

    sql server 2008 r2
    RS2008 r2
    I can execute the query in BIDS 2008 with out a problem and I can run on our RS2005 server without a problem
    But when I deploy report and run on our RS2008 server I get the error
    An error has occurred during report processing. (rsProcessingAborted)
    Query execution failed for dataset 'NIR'. (rsErrorExecutingCommand)
    ORA-01843: not a valid month 
    QUERY:
    select * from NIR_QUARTERLY where birth_date between :PARAM1 and :PARAM2
    order by PT_CODE

    CAUSE
    The problem is caused by not using VALID dates values in the dataset.
    - This data problem was masked in the original version as the Predicate(s) used can change between versions of Oracle
    - Oracle does *not* guarantee the same explain plan or the specific order of predicates used between versions of Oracle
    Reviewing the  EXPLAIN PLAN for both versions revealed in this case:
    1) The table was partitioned
    2) The EXPLAIN PLANS were not the same due to how the partitions were accessed
    3) If the same query was used against a non-partitioned table using the same data, the following error would always occur
       ORA-01843: not a valid month
    4) The problem string value was in this case found to include the string value of  '0000-00-00'
      The ORA-01843 occurred when using the TO_DATE function against '0000-00-00'
    There is *no* Year= '0000' Month= '00' or day = '00' -- therefore the  ORA-01843: not a valid month
    --Prashanth

  • Date error ORA-01843: not a valid month

    Hi,
    I am in a 4.01 Apex environment with NLS_DATE_FORMAT     mm/dd/yyyy. I created a view with a CASE statements using 'when eventstartdate between '08/15/2010' and '06/1/2011' then...' clauses and the view is created fine. I also can query the view with no problem with SQL workshop and the CASE statements work as expected. When I create an interactive report on that view I keep getting ORA-01843: not a valid month. I even tried matching the format in the Interactive Report column format mask to the NLS format for the date and still get error.
    What seems especially strange to me is that even if I have the view column defined with a 'to_char' I still get the same error when I use the CASE statement to build the view. Doesn't the Interactive Report just 'see' the View column definitions-- why should it 'care' how the view was built?
    The only way I can get the View to work with an Interactive report in any manner is to remove all the CASE statements and define the 'eventstartdate' as text using to_char but that then eliminates my ability to do any filters that require date comparisons with between or '>', '<'.
    Help would be appreciated!
    Thanks,
    Pat

    Quick late night response - always convert your dates for comparison. Apples to apples
    Instead of between '01/31/2012', use either
    TO_DATE('01/31/2012', 'MM/DD/YYYY')or
    DATE '2012-01-31'More related info
    http://www.grassroots-oracle.com/2011/03/date-format-tolerance.html
    Sorry if I'm off target, thought it may help

  • Query Builder session settings as a solve to ORA-01843 (not a valid month)

    Hi All! I'm novice at Oracle and RDBMS, so sorry for a dummy question.
    I'm trying to make some queries to a tutorial database (10g XE) with Query Builder of Application Express 2.1000039.
    I'm requesting columns with id, date of order and status of order; in a column of ordering date as a "where" condition I've wrote:
    >= to_date('23-JUN-2006', 'DD-MON-RRRR') and got an error "ORA-01843: not a valid month".
    Then I've edited row filtering condition:
    >= to_date('23-JUN-2006', 'DD-MON-RRRR', 'NLS_DATE_LANGUAGE = american') and 've got a correct query result, BUT resulting table date format is DD-MM-RR.
    So, here is a couple of questions:
    1. Can I change a session settings (e.g. alter session set NLS_DATE_FORMAT = 'DD-MON-RRRR') such way, to use it in Query Builder, before building an application itself and not to write 'NLS_DATE_LANGUAGE = american' every time I'm inserting data to a date datatype field?
    2. I wonder why resulting table date format is 'DD-MM-RRRR'. How can I get a data exactly in a date format 'DD-MON-RRRR', how I'm specifying in a query?
    My operating system is Windows 7 Home Basic, NLS_DATE_FORMAT is DD-MON-YYYY in 2 cases in register and respectively in environment variable.
    SQL*Plus displays all mentionted query tables correctly, corresponding to an 'ALTER SESSION ..... SETTINGS'.
    Hope to your help, guys. Thanks for answers!

    Hi,
    you can run the following query so you will see the session parameter values, and any differences with database and instance values :
    SELECT
      a1.parameter as "Parameter",
      a1.value as "Database value",
      a2.value as "Instance value",
      a3.value as "Session value"
    FROM
      nls_database_parameters a1
      LEFT JOIN nls_instance_parameters a2 ON a1.parameter = a2.parameter
      LEFT JOIN nls_session_parameters a3 ON a1.parameter = a3.parameter
    ORDER BY
      a1.parameter ASC;What are the values for NLS_DATE_LANGUAGE and NLS_DATE_FORMAT ?
    1. Can I change a session settings such way, to use it in Query Builder, before building an application itself and not to write 'NLS_DATE_LANGUAGE = american' every time I'm inserting data to a date datatype field?In the application, It depends on the Application Primary Language and Application Date Format you have set in the application globalization attributes. But you can also alter the session every time the APEX engine connects to the database, by entering some PL/SQL code in the Initialization PL/SQL Code attribute of the application (Application Builder -> Application -> Edit Security Attributes) :
    BEGIN
       EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_LANGUAGE = ''AMERICAN'' ';
    END;In all cases application level settings will only affect the application, not SQL Commands and Query Builder. I think you have to alter session manually each time for these two last tools :/

  • Converting a character string to into a date raise ORA-01843

    I always confused in using to_date() function,such as the following example.How could I convert the string "'8-十月-2006 " into a date correctly.Thank you in advance.
    SQL> select TO_DATE('18-十月-2006 16:49:57','dd-mon-yyyy hh24:mi:ss','nls_DATE_language=''SIMPLIFIED CHINESE''') from dual;
    select TO_DATE('18-十月-2006 16:49:57','dd-mon-yyyy hh24:mi:ss','nls_DATE_language=''SIMPLIFIED CHINESE''') from dual
    ORA-01843: not a valid month

    Hello:
    I suppose you have a bad Oracle-client enviroment. If you note, you can't see a valid month, in place you are seeeing tho characters: '??'. This often indicates that you Oracle client settings (like NLS_LANG, NLS_DATE, etc.) are bad and you are not cappable to do some translation to see it.
    Try if you can see another data from your database in Chinesse format, because also is possible that enviroment of your Oracle server is badly configured (like lang variables).

  • ORA-01843: not a valid month - Oracle 11gR2 vs Oracle 10gR2

    Hi,
    We have two database servers one running on 10g and another running on 11g. Application written in Java (We are using Top link to connect oracle).
    Insert query on timestamp works fine on database 10g where as same query fail on 11g and raise error ORA-01843.
    If query executed with sqlplus on database 11g it works fine. i
    INSERT INTO CAMP (CAMP_PK, TSTAMP_CREATED) VALUES (1, '2010-02-22 06:07:18.008')
    Below parameters set on DB:
    SQL> select * from nls_database_parameters;
    PARAMETER                      VALUE
    NLS_LANGUAGE                   AMERICAN
    NLS_TERRITORY                  AMERICA
    NLS_CURRENCY                   $
    NLS_ISO_CURRENCY               AMERICA
    NLS_NUMERIC_CHARACTERS         .,
    NLS_CHARACTERSET               WE8MSWIN1252
    NLS_CALENDAR                   GREGORIAN
    NLS_DATE_FORMAT                DD-MON-RR
    NLS_DATE_LANGUAGE              AMERICAN
    NLS_SORT                       BINARY
    NLS_TIME_FORMAT                HH.MI.SSXFF AM
    NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
    NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
    NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
    NLS_DUAL_CURRENCY              $
    NLS_COMP                       BINARY
    NLS_LENGTH_SEMANTICS           BYTE
    NLS_NCHAR_CONV_EXCP            FALSE
    NLS_NCHAR_CHARACTERSET         AL16UTF16
    NLS_RDBMS_VERSION              11.2.0.1.0
    SQL > show parameter nls_
    nls_date_format                      string      YYYYMMDD HH24:MI:SS
    nls_timestamp_format                 string      YYYY-MM-DD HH24:MI:SS.FF3
    nls_timestamp_tz_format              string      YYYYMMDD HH24:MI:SS.FF3 TZD
    Got below session data from application, both are identical.
    "11g"
         NLS_LANGUAGE=> AMERICAN
         NLS_TERRITORY=> AMERICA
         NLS_CURRENCY=> $
         NLS_ISO_CURRENCY=> AMERICA
         NLS_NUMERIC_CHARACTERS=> .,
         NLS_CALENDAR=> GREGORIAN
         NLS_DATE_FORMAT=> DD-MON-RR
         NLS_DATE_LANGUAGE=> AMERICAN
         NLS_SORT=> BINARY
         NLS_TIME_FORMAT=> HH.MI.SSXFF AM
         NLS_TIMESTAMP_FORMAT=> DD-MON-RR HH.MI.SSXFF AM
         NLS_TIME_TZ_FORMAT=> HH.MI.SSXFF AM TZR
         NLS_TIMESTAMP_TZ_FORMAT=> DD-MON-RR HH.MI.SSXFF AM TZR
         NLS_DUAL_CURRENCY=> $
         NLS_COMP=> BINARY
         NLS_LENGTH_SEMANTICS=> BYTE
         NLS_NCHAR_CONV_EXCP=> FALSE
    "10g"
         NLS_LANGUAGE=> AMERICAN
         NLS_TERRITORY=> AMERICA
         NLS_CURRENCY=> $
         NLS_ISO_CURRENCY=> AMERICA
         NLS_NUMERIC_CHARACTERS=> .,
         NLS_CALENDAR=> GREGORIAN
         NLS_DATE_FORMAT=> DD-MON-RR
         NLS_DATE_LANGUAGE=> AMERICAN
         NLS_SORT=> BINARY
         NLS_TIME_FORMAT=> HH.MI.SSXFF AM
         NLS_TIMESTAMP_FORMAT=> DD-MON-RR HH.MI.SSXFF AM
         NLS_TIME_TZ_FORMAT=> HH.MI.SSXFF AM TZR
         NLS_TIMESTAMP_TZ_FORMAT=> DD-MON-RR HH.MI.SSXFF AM TZR
         NLS_DUAL_CURRENCY=> $
         NLS_COMP=> BINARY
         NLS_LENGTH_SEMANTICS=> BYTE
         NLS_NCHAR_CONV_EXCP=> FALSE
    Does DBTIMEZONE make any impact on nls ?
    "11g"
    SQL> SELECT DBTIMEZONE, SESSIONTIMEZONE, SYSDATE FROM DUAL;
    DBTIMEZONE      SESSIONTIMEZONE                SYSTIMESTAMP
    +00:00          -05:00                         20100222 05:07:25.343
    "10g"
    SQL> SELECT DBTIMEZONE, SESSIONTIMEZONE, SYSDATE FROM DUAL;
    DBTIMEZONE      SESSIONTIMEZONE                SYSTIMESTAMP
    -05:00          -05:00                         20100222 05:07:34.771I am agree we can resolve this issue with to_timestamp but i need to defend on why it was working on 10g and not on 11g.

    A timestamp in the form '2010-02-22 06:07:18.008' should have never been accepted with NLS_TIMESTAMP_TZ_FORMAT='DD-MON-RR HH.MI.SSXFF AM TZR'. So there are three possibilities:
    1) The NLS_TIMESTAMP_TZ_FORMAT session format (NLS_SESSION_PARAMETERS) in force during the INSERT is not really the one you listed.
    2) The column CAMP.TSTAMP_CREATED is of type VARCHAR2 and not TIMESTAMP in the 10g database.
    3) There is a bug in the JDBC driver you use with 10g that allows this strange conversion.
    4) The SQL issued in the 10g database is really:
    INSERT INTO CAMP (CAMP_PK, TSTAMP_CREATED) VALUES (1, TIMESTAMP '2010-02-22 06:07:18.008')-- Sergiusz

  • Oracle error "ORA-01843: not a valid month" when trying to run sqlldr

    Hi all,
    I'm trying to load some data into a staging database via a CSV file using sqlldr, and am running into an issue where it doesn't like the date format I'm using.
    Here is my input data:
    2012-01-09 16:28:12 -05:00Here is the entry in the .ctl file:
    created TIMESTAMP WITH TIME ZONE 'yyyy-mm-dd HH24:MI:SS TZR'And finally, here is the entry in the .sql file:
    created TIMESTAMP WITH TIME ZONEAfter I try to load, I get greeted with the dreaded error message: Record 1: Rejected - Error on table WTPART, column CREATED. ORA-01843: not a valid month
    I'm really confused as to why it's blowing up on the date, because it seems to me that "01" is indeed a valid date in terms of the date format I'm using. Any ideas? Thanks!
    Edited by: Nick Tiberi on Jan 10, 2012 8:06 AM

    Hmmm, not sure exactly what the problem is. It works fine for me on my XE instance.
    Set up the control and data files....
    tubby@Tubbz:~/test$ cat >> WTPart.csv <<EOF
    2012-01-09 16:28:12 -05:00
    EOF
    tubby@Tubbz:~/test$
    tubby@Tubbz:~/test$ cat >> load.ctl <<EOF
    LOAD DATA
    INFILE WTPart.csv
    APPEND INTO TABLE WTPart
    FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"'
    TRAILING NULLCOLS
    created TIMESTAMP WITH TIME ZONE 'yyyy-mm-dd HH24:MI:SS TZR'
    EOF
    tubby@Tubbz:~/test$
    tubby@Tubbz:~/test$ /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/sqlldr tubby/pswd@xe control=load.ctl
    SQL*Loader: Release 10.2.0.1.0 - Production on Tue Jan 10 10:21:28 2012
    Copyright (c) 1982, 2005, Oracle.  All rights reserved.
    Commit point reached - logical record count 1
    tubby@Tubbz:~/test$
    {code}
    Query the result from the database
    {code}
    ME_XE?select * from wtpart;
    CREATED
    09-JAN-12 04.28.12.000000 PM -05:00
    1 row selected.
    Elapsed: 00:00:00.01
    ME_XE?
    ME_XE?select * from v$version;
    BANNER
    Oracle Database 10g Express Edition Release 10.2.0.1.0 - Product
    PL/SQL Release 10.2.0.1.0 - Production
    CORE    10.2.0.1.0      Production
    TNS for Linux: Version 10.2.0.1.0 - Production
    NLSRTL Version 10.2.0.1.0 - Production
    5 rows selected.
    Elapsed: 00:00:00.01
    ME_XE?
    {code}
    Are you sure your CSV file doesn't have some "funky" data in it?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

  • The database error text is: ORA-01843: not a valid month

    I am trying to use a date field as a query filter and I keep getting the
    following error:
    A database error occurred. The database error text is: ORA-01843: not a
    valid month. (WIS 10901).
    When I remove the query filter and run the query it works as
    expected. I want to be able to allow the users to use the date field in order
    to select a date range. Can someone provide me with some information on how to
    resolve this issue.

    SQL> SELECT (to_char(tO_date('09/29/2006', 'mm/dd/yyyy'))||':'||TO_CHAR(systimestamp,'hh24:mi:ss:ff6'))
      2  FROM dual;
    (TO_CHAR(TO_DATE('09/29/2006
    29-SEP-06:01:33:09:023000
    But you want mm/dd/yyyy hh24:mi:ss:ff6 format then use TO_CHAR function for format specifier
    SQL> SELECT to_char(to_timestamp((to_char(tO_date('09/29/2006', 'mm/dd/yyyy'))||':'||TO_CHAR(systimestamp,'hh24:mi:ss:ff6')), 'dd/mm/yyyy hh24:mi:ss:ff6'),'mm/dd/yyyy hh24:mi:ss:ff6')
      2  FROM DUAL
      3  /
    TO_CHAR(TO_TIMESTAMP((TO_CHAR
    09/29/0006 01:40:27:113000
    SQL> Khurram

  • Using XML Operation Tags to query by date

    Problem 1:
    When I use timestamps from items' XML to form queries on repositories, I receive SQL errors.
    Problem 1 Example:
    Query the PublishingRepository to find all active projects created on August 16.
    In Dynamo Administration, navigate to /atg/epub/PublishingRepository
    In the box labeled "Run XML Operation Tags on the Repository," enter the following tag:
        <query-items item-descriptor="project">status = "Active" AND creationDate = "08/16/2013"</query-items>
    Result: java.sql.SQLDataException: ORA-01843: not a valid month
    Problem 1 Solution:
    Use this query instead:
    <query-items item-descriptor="project">
    status = "Active"
    AND
    creationDate = date("2013-08-16")
    </query-items>
    Problem 2:
    Using the "<" operator to construct a less-than argument doesn't work.
    Problem 2 Example:
    Query the PublishingRepository to find all active projects created before August 16.
    In Dynamo Administration, navigate to /atg/epub/PublishingRepository
    In the box labeled "Run XML Operation Tags on the Repository," enter the following tag:
        <query-items item-descriptor="project">status = "Active" AND creationDate < date("2013-08-16")</query-items>
    Result: SOURCE:org.xml.sax.SAXParseException: The content of elements must consist of well-formed character data or markup.
    Problem 2 Solution:
    For some reason, the ">" greater-than operator seems to work fine, even when the "<" less-than operator won't. You can switch around the order of the query to get the desired result:
    <query-items item-descriptor="project">
    status = "Active"
    AND
    date("2013-08-16") > creationDate
    </query-items>

    Problem 1:
    When I use timestamps from items' XML to form queries on repositories, I receive SQL errors.
    Problem 1 Example:
    Query the PublishingRepository to find all active projects created on August 16.
    In Dynamo Administration, navigate to /atg/epub/PublishingRepository
    In the box labeled "Run XML Operation Tags on the Repository," enter the following tag:
        <query-items item-descriptor="project">status = "Active" AND creationDate = "08/16/2013"</query-items>
    Result: java.sql.SQLDataException: ORA-01843: not a valid month
    Problem 1 Solution:
    Use this query instead:
    <query-items item-descriptor="project">
    status = "Active"
    AND
    creationDate = date("2013-08-16")
    </query-items>
    Problem 2:
    Using the "<" operator to construct a less-than argument doesn't work.
    Problem 2 Example:
    Query the PublishingRepository to find all active projects created before August 16.
    In Dynamo Administration, navigate to /atg/epub/PublishingRepository
    In the box labeled "Run XML Operation Tags on the Repository," enter the following tag:
        <query-items item-descriptor="project">status = "Active" AND creationDate < date("2013-08-16")</query-items>
    Result: SOURCE:org.xml.sax.SAXParseException: The content of elements must consist of well-formed character data or markup.
    Problem 2 Solution:
    For some reason, the ">" greater-than operator seems to work fine, even when the "<" less-than operator won't. You can switch around the order of the query to get the desired result:
    <query-items item-descriptor="project">
    status = "Active"
    AND
    date("2013-08-16") > creationDate
    </query-items>

  • XMLTable default values for timestamp results in ORA-01843: not a valid month

    When I try to provide a default for a timestamp value in the XMLTABLE function, I am greeted with an error - ORA-01843: not a valid month - no matter how I provide that default value. Whether there is a value present in the XML or not is irrelavant for this bug to occur. It appears to be an incomplete fix of bug number 9745897 (thread).
    select x.*
    from
    xmltable('/DOC' passing xmltype('<DOC><DT>2013-08-14T15:08:31</DT></DOC>')
      COLUMNS dt timestamp default sysdate) x;
    select x.*
    from
    xmltable('/DOC' passing xmltype('<DOC><DT>2013-08-14T15:08:31</DT></DOC>')
      COLUMNS dt timestamp default systimestamp) x;
    select x.*
    from
    xmltable('/DOC' passing xmltype('<DOC><DT>2013-08-14T15:08:31</DT></DOC>')
      COLUMNS dt timestamp default to_char(systimestamp, 'YYYY-MM-DD"T"HH24:MI:SS') ) x;
    Edit: A little more followup.
    This works:
    select x.*
    from
    xmltable('/DOC' passing xmltype('<DOC></DOC>')
      COLUMNS dt date default sysdate) x;
    This also works, except for its just the date, and not the date/time
    select x.*
    from
    xmltable('/DOC' passing xmltype('<DOC></DOC>')
      COLUMNS dt timestamp default sysdate) x;
    This doesn't work
    select x.*
    from
    xmltable('/DOC' passing xmltype('<DOC></DOC>')
      COLUMNS dt timestamp default systimestamp) x;
    ORA-01861: literal does not match format string

    Hi,
    First of all, let's check the manual for the DEFAULT clause :
    XMLTABLE SQL/XML Function in Oracle XML DB
    The optional DEFAULT clause specifies the value to use when the PATH expression results in an empty sequence (or NULL). Its expr is an XQuery expression that is evaluated to produce the default value.
    According to the documentation, the DEFAULT clause should specify an XQuery expression.
    However, that is wrong, the actual implementation only expects an expression that resolves to a string, the content is not interpreted.
    So, bottom line is if we don't directly specify a string, the expression will be implicitly converted to one, and we all know how bad things can go when implicit conversions occur, especially when dates or timestamps are involved.
    Now let's focus on how the DEFAULT clause affects the query evaluation.
    When a DEFAULT clause is specified, Oracle rewrites the projection differently and do not use the native xs:dateTime format to convert the value  :
    select x.*
    from
    xmltable('/DOC' passing xmltype('<DOC><DT>2013-08-14T15:08:31</DT></DOC>')
      COLUMNS dt timestamp default systimestamp
      ) x
    becomes :
    SELECT CASE EXISTSNODE(VALUE(KOKBF$),'/DOC/DT')
             WHEN 1 THEN CAST(TO_TIMESTAMP(SYS_XQ_UPKXML2SQL(SYS_XQEXVAL(SYS_XQEXTRACT(VALUE(KOKBF$),'/DOC/DT')),50,1,2)) AS timestamp )
             ELSE CAST(TO_TIMESTAMP(TO_CHAR(SYSTIMESTAMP(6)),'SYYYY-MM-DD"T"HH24:MI:SSXFF') AS timestamp )
           END  "DT"
    FROM TABLE("SYS"."XQSEQUENCE"(EXTRACT("SYS"."XMLTYPE"('<DOC><DT>2013-08-14T15:08:31</DT></DOC>'),'/DOC'))) "KOKBF$"
    See the red part : it doesn't use the format parameter, so the conversion relies on the session's NLS settings.
    When there's no DEFAULT clause, the TO_TIMESTAMP function uses an explicit format :
    select x.*
    from
    xmltable('/DOC' passing xmltype('<DOC><DT>2013-08-14T15:08:31</DT></DOC>')
      COLUMNS dt timestamp --default systimestamp
      ) x
    rewritten to :
    SELECT CAST(
             TO_TIMESTAMP(
               SYS_XQ_UPKXML2SQL(SYS_XQEXVAL(SYS_XQEXTRACT(VALUE(KOKBF$),'/DOC/DT'),0,0,20971520,0),50,1,2)
             , 'SYYYY-MM-DD"T"HH24:MI:SSXFF'
             AS timestamp --default systimestamp
           ) "DT"
    FROM TABLE("SYS"."XQSEQUENCE"(EXTRACT("SYS"."XMLTYPE"('<DOC><DT>2013-08-14T15:08:31</DT></DOC>'),'/DOC'))) "KOKBF$"
    so yes, maybe there's a bug here.
    Edit: A little more followup.
    This works:
    select x.*
    from
    xmltable('/DOC' passing xmltype('<DOC></DOC>')
      COLUMNS dt date default sysdate) x;
    Actually no, it doesn't work. Granted, maybe it doesn't produce any error, but the result is incorrect.
    As explained, the conversion relies on the session NLS (NLS_DATE_FORMAT in this case) :
    SQL> show parameters nls_date_format
    NAME                                 TYPE        VALUE
    nls_date_format                      string      DD/MM/RR
    SQL>
    SQL> select sysdate from dual;
    SYSDATE
    16/08/13
    SQL> select x.*
      2  from
      3  xmltable('/DOC' passing xmltype('<DOC></DOC>')
      4    COLUMNS dt date default sysdate) x;
    DT
    13/08/16
    Oracle first converts SYSDATE to a string using current NLS_DATE_FORMAT, resulting in '16/08/13'
    Then this string is converted to a DATE using the xs:date format 'YYYY-MM-DD' resulting in 13/08/0016 (August 13, 0016) which is incorrect.
    The obvious workaround to this issue is to control how Oracle implicitly converts from string to date/timestamp format :
    SQL> alter session set NLS_TIMESTAMP_FORMAT= 'YYYY-MM-DD"T"HH24:MI:SS';
    Session altered.
    SQL> select x.*
      2  from
      3  xmltable('/DOC' passing xmltype('<DOC><DT>2013-08-14T15:08:31</DT></DOC>')
      4    COLUMNS dt timestamp default systimestamp
      5    ) x;
    DT
    2013-08-14T15:08:31
    SQL> select x.*
      2  from
      3  xmltable('/DOC' passing xmltype('<DOC></DOC>')
      4    COLUMNS dt timestamp default systimestamp) x;
      COLUMNS dt timestamp default systimestamp) x
    ERROR at line 4:
    ORA-01861: literal does not match format string
    SQL> select x.*
      2  from
      3  xmltable('/DOC' passing xmltype('<DOC></DOC>')
      4    COLUMNS dt timestamp default cast(systimestamp as timestamp)) x;
    DT
    2013-08-16T12:32:58

Maybe you are looking for