Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

ora-01841:full year must be between -4713 and +9999 and not be 0

Dieses Thema im Forum "Oracle" wurde erstellt von Denis, 14 Januar 2013.

  1. Denis

    Denis Benutzer

    Hallo,
    Access brint mir beim Ausführen der verknüpften Oracle View die Fehlermeldung ORA-01841.
    Die Ausführung des Views auf der Oracle DB funktioniert problemlos. Vermute das Problem hier: to_char(SYSDATE,'YYYY').


    Auszug aus der View:
    where (n.NETZ_NR,n.GUELTIG_BIS) in (select NETZ_NR,max(GUELTIG_BIS)
    from XYZ
    where GUELTIG_SEIT <= to_date('31.12.' || to_char(SYSDATE,'YYYY') ,'DD.MM.YYYY')
    group by NETZ_NR)
     
  2. ukulele

    ukulele Datenbank-Guru

    Ein select to_date('31.12.' || to_char(SYSDATE,'YYYY') ,'DD.MM.YYYY') liefert dir einen gültigen Datumswert? Was liefert select SYSDATE?
     
  3. Denis

    Denis Benutzer

    select to_date('31.12.' || to_char(SYSDATE,'YYYY') ,'DD.MM.YYYY') from dual = 31.12.2013

    Select SYSDATE from DUAL = 14.01.2013
     
  4. ukulele

    ukulele Datenbank-Guru

    Hm, du könntest nochmal in CHAR umwandeln um zu sehen ob er die Jahreszahl aus dem DATE Format auch extrahieren kann:
    select to_char(to_date('31.12.' || to_char(SYSDATE,'YYYY') ,'DD.MM.YYYY'),'YYYY') from DUAL
    was aber gehen sollte.

    Es scheint ne Menge solcher komischen Erscheinungen mit dieser Fehlermeldung in Oracle zu geben, so ganz werde ich daraus nicht schlau sry.
     
  5. ukulele

    ukulele Datenbank-Guru

    Vieleicht solltest du die GUELTIG_SEIT Spalte mal untersuchen. Gibt es dort NULL Werte und was ist der höchste / niedrigste Jahreswert?
     
  6. Denis

    Denis Benutzer

    min(gueltig_seit) = 01.01.1999
    max(gueltig_seit) = 01.01.2013
    Keine Null Werte.
     
  7. Denis

    Denis Benutzer

    Fehler gefunden. Habe Äpfel mit Birnen verglichen :)

    Vorher: where GUELTIG_SEIT <= to_date('31.12.' || to_char(SYSDATE,'YYYY') ,'DD.MM.YYYY')
    Nachher: where to_char(gueltig_seit,'DD.MM.YYYY') <= '31.12.' || to_char(SYSDATE,'YYYY')

    Vorher habe ich Datum mit String verglichen, jetzt vergleiche String mit String. Funktioniert.

    Danke für Deine Mithilfe.
     
  8. ukulele

    ukulele Datenbank-Guru

    Ist GUELTIG_SEIT ein String? Eigentlich hast du ja Datum mit Datum verglichen und so sollte es auch sein. Wie willst du bei einer kleiner als Operation mit einem String verfahren? Wenn überhaupt dann Zahl.
     
  9. Denis

    Denis Benutzer

    Stimmt natürlich. Habe nun wieder auf >where gueltig_seit <= to_date('31.12.' || to_char(SYSDATE,'YYYY'),'DD.MM.YYYY'< umgestellt, so wie es vorher war und mir auch logisch erscheint und siehe da Access funktioniert wieder und Oracle sowieso. Keine Ahnung wieso ?
     
  10. ukulele

    ukulele Datenbank-Guru

    Ist mir auch ein Rätsel.
     
  11. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    Hy,

    die hauptsache ist es funkt für deinen Fall nun...
    Aber als Tipp, wie diese "to_char(sysdate, 'YYYY')" floskel umgangen werden kann:

    Code:
    select
    EXTRACT(month FROM order_date)
    from dual
    
    Oracle-Doku: http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions050.htm

    Dies funktioniert mit sysdate sowie allen "DATE" - Spalten von Tabellen usw...

    Lg
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden