Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Oracle DB - Select liefert Fehler aufgrund ungültigen Monats obwohl die betreffenden Zeilen ausgeschlossen sind

Mitglied: JanKorte

JanKorte (Level 1) - Jetzt verbinden

15.12.2009 um 10:10 Uhr, 9664 Aufrufe, 12 Kommentare

Ich habe einen Fehler in meinem Select, welcher mir ein ungültiges Datumsformat liefert. Durch diesen Fehler läuft der Select generell auf eine Exception hinaus.

Moin allerseits.

Vielleicht kann mir jemand mit einem Select weiterhelfen, der mich so langsam ratlos macht. Daher wollt ich mal gucken ob ihr da noch eine Lösung wisst.

01.
SELECT SUM(ZZLIEFG - ZZRUECKG)  
02.
FROM ZSD_PALETTEN_VIEW  
03.
WHERE wadat_ist != 00000000  
04.
and ZZPAL_ART = to_number('" & Hauptfenster.ComboBox_StatBestPalchooser.SelectedValue & "')   
05.
and to_date(WADAT_IST, 'YYYYMMDD') <= to_date('" & datumlast & "', 'DD.MM.YYYY HH24:MI:SS')

nicht wundern, da sind teile von VisualBasic.Net drin. Der select wird von einem Programm ausgeführt welches den Bestand von Paletten zu einem bestimmten Zeitpunkt ausgibt.
Das betreffende Datumsfeld hat die bezeichnung "wadat_ist"

Die falschen Werte im Feld "wadat_ist" die NICHT verändert werden dürfen haben den Wert "00000000"


Problem ist:
- es gibt falsche Datumseinträge in der Tabelle, die ich aufgrund angeschlossener SAP Systeme nicht ändern kann
- das Feld wo das datum enthalten ist ist vom Typ VARCHAR2(8), was natürlich unpraktisch ist aber nicht verändert werden darf (ebenso wegen SAP)

Any Ideas?

Gruß,
Jan
Mitglied: Biber
15.12.2009 um 11:27 Uhr
Moin Jan Korte,

... WHERE wadat_ist != 00000000
Erwähntest du nicht, dass wadat_ist eigentlich ein VARCHAR2(8)-Feld ist?
Wäre dann nicht
...WHERE wadat_ist != '00000000'
...ein besserer Einstieg?

Zusatzfragen:
  • Wie gehst du denn inhaltlich mit den "ungültigen" Datumswerten um? Fallen die vollkommen unter den Tisch?
  • wenn ja - wieso filterst du die nicht komplett raus schon im ZSD_PALETTEN_VIEW?
  • wenn nein - warum setzt du die nicht schon im eben genannten View auf einen "erkennbaren" Wert von z.B. '31.12.9999' oder ähnlich, damit sie logisch richtig verarbeitbar sind?

Grüße
Biber
Bitte warten ..
Mitglied: JanKorte
15.12.2009 um 14:12 Uhr
klar,... die Anführungszeichen. Die hatte ich jetzt beim Übertragen vergessen, sind aber vorhanden. Da ich nicht persönlich für den View verantwortlich bin habe ich die Anpassung mal grad weitergegeben.

Wenns was neues gibt meld ich mich nochmal, ansonsten vielen Dank für den Hinweis auf die Banalität die ich übersehen hab ^^.

Gruß, Jan
Bitte warten ..
Mitglied: JanKorte
15.12.2009 um 15:11 Uhr
Also,.. der Fehler besteht weiterhin.

Es muss in der Tabelle wohl mehrere Einträge geben, die kein Datumsformat besitzen. Da hilft es mir auch nicht die Einträge mit dem Wert '00000000' auszufiltern, weil es noch hunderte andere gibt, die ein falsches Format besitzen.

Dumm gelaufen.

Gibt es nicht irgendeine Abfrage, die ungültige Datumsfelder findet und anzeigt? Bzw. eine Selectanweisung mit der man die ausfiltern kann ohne jeden einzelnen Eintrag zu durchsuchen?

Hoffnungslose Sache im Moment. Ich hoffe Ihr wisst Rat .


Gruß, Jan
Bitte warten ..
Mitglied: Biber
15.12.2009 um 15:35 Uhr
Moin Jan Korte,

Hoffnungslose Sache im Moment
Na ja, wenn du meine Ex-Schwiegermutti kennengelernt hättest, dann würdest du nicht so leichtfertig mit dem Begriff "hoffnungslos" umgehen.

Also, richtig ist: Oracle kennt von Haus aus keine vorgefertigte IsDate()-Funktion, die du ja eigentlich brauchst.

Aber: Ja hey! Dann braten wir halt eine zusammen. Denn ein Oracle-Server ist ja offensichtlich im Hintergrund, und der hat immer Spaß an so was.

Eine einfache (aber ausreichende) Implemetierungsskizze findest du z.B bei AskTom,
eine etwas aufwändigere (aber brauchbarere) hier.

Irgendwo zwischen diesen beiden Extremen solltest du deine passende Lösung zusammenschroten.

Grüße
Biber
Bitte warten ..
Mitglied: JanKorte
15.12.2009 um 16:27 Uhr
So,

ich habe dann mal ne Funktion eingebaut und hab die daten mit folgender Funktion getestet:

01.
create or replace 
02.
function IsDate (str varchar2) return varchar2 is 
03.
inDate varchar2(40); 
04.
 
05.
FUNCTION dateCheck (inputDate varchar2, inputMask varchar2) 
06.
RETURN varchar2 
07.
IS 
08.
dateVar date; 
09.
 
10.
BEGIN 
11.
dateVar:= to_date(inputDate,inputMask); 
12.
return 'true'; 
13.
exception 
14.
when others then 
15.
return 'false'; 
16.
END; 
17.
 
18.
BEGIN 
19.
inDate:= trim(str); 
20.
if dateCheck(inDate, 'yyyymmdd') = 'false' 
21.
then 
22.
return 'false'; 
23.
else 
24.
return 'true'; 
25.
end if; 
26.
END;
Soweit so gut.

Der Testquery lautete folgendermaßen:

01.
Select wadat_ist, isdate(wadat_ist) from zsd_paletten_view;
Hier wurde kein Fehler in der Datenbanktabelle gefunden bis auf die mit '00000000' was mit ja generell zeigt das ISDATE() funktioniert.

Habe ich aber nun den Select erweitert und:

01.
Select to_date('wadat_ist', 'YYYYMMDD'), isdate(wadat_ist) from zsd_paletten_view where isdate(wadat_ist) = 'true';


angegeben, haut der mir wieder einen Fehler raus:
01.
Error report: 
02.
SQL Error: ORA-01841: (Volles) Jahr muss zwischen -4713 und +9999 liegen und darf nicht 0 sein 
03.
01841. 00000 -  "(full) year must be between -4713 and +9999, and not be 0" 
04.
*Cause:    Illegal year entered 
05.
*Action:   Input year in the specified range
Irgendwie hab ich das Gefühl das mich da wer nicht mag ^^
Bitte warten ..
Mitglied: Biber
15.12.2009 um 16:40 Uhr
Moin Jan Korte,

Zitat von JanKorte:

Irgendwie hab ich das Gefühl das mich da wer nicht mag ^^
Na ja, wenn du meine Ex-Schwiegermutti kennengelernt hättest, dann würdest du nicht so leichtfertig mit dem Begriff .....

Könnte es daran liegen, dass das Funktionsargument von to_date() ein konstanter String ist?
Select to_date('wadat_ist', 'YYYYMMDD')

Grüße
Biber
Bitte warten ..
Mitglied: JanKorte
15.12.2009 um 19:04 Uhr
jau,.. zumindestens das war ein Flüchtigkeitsfehler.

haben den View jetzt angepasst und ihm in seinen eingenen select folgendes gegeben;

01.
CREATE OR REPLACE FORCE VIEW "PALETTEN"."ZSD_PALETTEN_VIEW" ("MANDT", "KUNAG", "KUNNR", "ZZPAL_ART", "WADAT_IST", "VBELN", "VTEXT", "ZZLIEFG", "ZZRUECKG", "NAME1", "NAME2") AS  
02.
  SELECT "MANDT", 
03.
          "KUNAG", 
04.
          "KUNNR", 
05.
          "ZZPAL_ART", 
06.
        "WADAT_IST", 
07.
          "VBELN", 
08.
          "VTEXT", 
09.
          "ZZLIEFG", 
10.
          "ZZRUECKG", 
11.
          "NAME1", 
12.
          "NAME2" 
13.
     FROM zsd_paletten@sap_prod 
14.
     WHERE isdate(wadat_ist) = 'true';
die Zeile
01.
WHERE isdate(wadat_ist) = 'true';
sollte jetzt jeglichen Müll aus dem View filtern, was aber bei meiner Abfrage via Programm nicht so scheint.

Es wird immernoch der Fehler "Not a valid Month" angezeigt. So langsam hab ich Oracle gefressen. Wenn doch laut ISDATE() kein falscher Monat mehr im View vorhanden sein KANN, dann sollte die vor einigen Beiträgen erwähnte SQL Abfrage doch funktionieren?!

So langsam scheine ich deine Ex-Schwiegermutti zu kennen. *gg*

Gruß, Jan

PS: Gut,... Oracle kann nix dafür das da so besch.... Daten in den Tabellen stehen, aber es könnte mir wenigstens ein kleines bischen helfen die wieder loszuwerden.
Bitte warten ..
Mitglied: Biber
15.12.2009 um 19:35 Uhr
Moin Jan Korte,

kein Oracle dieser Welt kann so widerborstig sein wie meine Ex-Schwiegermutti... das knacken wir *gg

Dennoch - ich sehe auch (noch) nicht den logischen Trugschluss in "unserer" Vorgehensweise...
Die IsDate()-Funktion habe ich auch testweise bei mir (Oracle 10/11) installiert und okay, die works as designed.
Gut, ist ein bisschen albern mit den String-Rückgaben 'true' und 'false'.. das hätte ich evtl. ein bisschen anders gelöst.
Außerdem - was nicht mit deiner Fehlermeldung korrespondiert - sowohl "gültige" Datumsangaben aus dem Jahr 0 wie auch negative Jahreszahlen liefern mit der IsDate()-Funktion ein 'false'. hab ich jetzt nicht wirklich verstanden, aber hilft ja auch jetzt nicht weiter.

Also, dann wäre doch der nächste Schritt zur Lokalisierung der Sollbruchstelle, alle Sätze rauszupfriemeln, die laut Isdate(wadat_ist) 'true' zurückliefern, bei denen aber der Monat (Pos 5/6 des Varchar-Strings) nicht zwischen 1 und 12 liegt..

01.
SELECT * from PALETTEN.ZSD_PALETTEN_VIEW 
02.
Where isdate(wadat_ist) = 'true' 
03.
And ( Substr(wadat_ist, 5, 2) < '01'  or Substr( wadat_ist, 5, 2) >'12' )
oder so ähnlich

Grüße
Biber
Bitte warten ..
Mitglied: JanKorte
15.12.2009 um 21:07 Uhr
Moin Biber,

das alles klingt sehr sinnvoll, ist es sicherlich auch. Bin allerdings nicht mehr in der Firma und werde deswegen morgen weitergucken. Hab für heute erstmal die Schnauze voll.
Ich danke dir aber schonmal für die geleistete Hilfe und wünsche dir einen erholsamen Abend.

Bis Morgen mit Response zu der Select Erweiterung

Gruß, Jan
Bitte warten ..
Mitglied: JanKorte
08.05.2010 um 17:44 Uhr
Update zum Abschluss: Die Funktion IsDate hat funktioniert. Mein Programm läuft jetzt einwandfrei.

Vielen Dank Biber!!
Bitte warten ..
Mitglied: Biber
10.05.2010 um 07:30 Uhr
Moin Jan Korte,

danke für die Rückmeldung und Gratulation zur erfolgreichen Lösung.

Interessehalber: war denn noch eine Änderung/Verfeinerung der IsDate()-Funktion nötig?

Grüße
Biber
Bitte warten ..
Mitglied: JanKorte
13.05.2010 um 17:22 Uhr
Moinsen,

die IsDate()-Funktion hat so gereicht wie angegeben. Ich habe nur hier und da in der Abfrage noch ein paar Sachen ausgeschlossen, welche allerdings nichts mit dem Datum zu tun hatten.

Vielen Dank für deine Hilfe. Ich revanchier mich gern mal sobald ich die Chance dazu bekomme ^^

Gruß, Jan
Bitte warten ..
Ähnliche Inhalte
Datenbanken
Fehler bei der Oracle DB-Sicherung
Frage von dbox3Datenbanken1 Kommentar

Hallo liebe Gemeinde, ich habe auf meinem Server 2008r2 eine Sicherung der Oracle-DB eingerichtet, die längere Zeit problemlos lief, ...

Datenbanken
ORACLE DB Abfrage
Frage von MarabuntaDatenbanken5 Kommentare

Hallo, ich habe folgende Tabelle: Jetzt brauche ich eine Abfrage, um das vorletzte Datum auszugeben. Vorher: Zwischenstand: In den ...

Datenbanken
IF Abfrage im SELECT Oracle SQL
gelöst Frage von 94451Datenbanken2 Kommentare

Hallo , ist es möglich im SELECT eine IF-Abfrage machen (bin auch offen für eine andere Lösung). >SELECT ID, ...

Microsoft Office

Abfrage durch vba von Oracle-DB, Fehlermeldung

Frage von famsprengeMicrosoft Office

Hallo zusammen, ich versuche mit Excel-vba eine Abfrage von einer Oracle-Datenbank durchzuführen. Der Code läuft durch bis zum Öffnen ...

Neue Wissensbeiträge
Windows 10

USB Maus und Tastatur versagen Dienst unter Windows 10

Erfahrungsbericht von hardykopff vor 9 StundenWindows 103 Kommentare

Da steht man ziemlich dumm da, wenn der PC sich wegen fehlender USB Tastatur und Maus nicht bedienen lässt. ...

Administrator.de Feedback
Update der Seite: Alles zentriert
Information von Frank vor 12 StundenAdministrator.de Feedback10 Kommentare

Hallo User, die größte Änderung von Release 5.8 ist das Zentrieren der Webseite (auf großen Bildschirmen) und ein "Welcome"-Teaser ...

Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 1 TagHumor (lol)4 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 1 TagGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Heiß diskutierte Inhalte
Server-Hardware
Welche Rolle spielt Design bei Enterprise IT Hardware?
Frage von ApolloXServer-Hardware17 Kommentare

Ich arbeite für einen internationalen Elektronikhersteller in der Forschung und meine Aufgabe ist es, Feedback von Nutzern in Hinsicht ...

Windows Netzwerk
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Netzwerk15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Speicherkarten
Vergessliche USB-Sticks?
Frage von hanheikSpeicherkarten14 Kommentare

Ich habe in den letzten Tagen 500 USB-Sticks mit Bilddateien bespielt. Obwohl ich die Dateien mit größter Sorgfalt kopiert ...

Switche und Hubs
Cisco SG350X-48 AdminIP in anderes VLAN
Frage von lcer00Switche und Hubs14 Kommentare

Hallo zusammen, ich habe ein Problem mir einem Cisco SG350X-48 bei der Erstinstallation wurde eine IP 192.168.0.254 (Default VLAN ...