Erdmann Geschrieben 23. April 2009 Teilen Geschrieben 23. April 2009 Hallo zusammen, ich habe ein kleineres Problem bei einem Trigger in meiner Oracle XE Datenbank und will einfach nicht auf den Fehler kommen, vielleicht entdeckt ihn ja wer von euch =) Ich habe eine Tabelle I_ZEIT in welches ich I_TAG, I_JAHR und I_MONAT habe. Zusätzlich das Feld I_WOCHE, in welchem die jeweilige Jahreswohe bei einem Insert/Update durch einen Trigger eingetragen werden soll. Mein Trigger schaut so aus: create or replace trigger "T_I_ZEIT_WOCHENTAG" BEFORE insert or update on "I_ZEIT" for each row declare wochentag number; begin wochentag := :new.i_zeit_monat * 10000; wochentag := wochentag + :new.i_zeit_jahr; wochentag := wochentag + :new.i_zeit_tag * 1000000; :new.i_zeit_woche := to_number(to_char(to_date('wochentag','ddmmyyyy'),'WW')); end; Der Trigger wird ohne Fehler kompiliert: PL/SQL code successfully compiled (15:10:02) Wenn ich nun aber einen Insert auf den Table mache kommt folgende Fehlermeldung: error ORA-01858: Ein nicht-numerisches Zeichen wurde gefunden, während ein numerisches Zeichen erwartet wurde ORA-06512: in "DWP1138.T_I_ZEIT_WOCHENTAG", Zeile 8 ORA-04088: Fehler bei der Ausführung von Trigger 'DWP1138.T_I_ZEIT_WOCHENTAG' Meiner Ansicht nach ist alles korrek gecastet, ich habe es auch schon in anderen Cast Variationen versucht, aber es will einfach nicht funktionieren /o\ Vielleicht hat jemand von euch ja noch eine Idee? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dbwizard Geschrieben 24. April 2009 Teilen Geschrieben 24. April 2009 Hallo zusammen, ich habe ein kleineres Problem bei einem Trigger in meiner Oracle XE Datenbank und will einfach nicht auf den Fehler kommen, vielleicht entdeckt ihn ja wer von euch =) Ich habe eine Tabelle I_ZEIT in welches ich I_TAG, I_JAHR und I_MONAT habe. Zusätzlich das Feld I_WOCHE, in welchem die jeweilige Jahreswohe bei einem Insert/Update durch einen Trigger eingetragen werden soll. Mein Trigger schaut so aus: create or replace trigger "T_I_ZEIT_WOCHENTAG" BEFORE insert or update on "I_ZEIT" for each row declare wochentag number; begin wochentag := :new.i_zeit_monat * 10000; wochentag := wochentag + :new.i_zeit_jahr; wochentag := wochentag + :new.i_zeit_tag * 1000000; :new.i_zeit_woche := to_number(to_char(to_date('wochentag','ddmmyyyy'),'WW')); end; Der Trigger wird ohne Fehler kompiliert: PL/SQL code successfully compiled (15:10:02) Wenn ich nun aber einen Insert auf den Table mache kommt folgende Fehlermeldung: error ORA-01858: Ein nicht-numerisches Zeichen wurde gefunden, während ein numerisches Zeichen erwartet wurde ORA-06512: in "DWP1138.T_I_ZEIT_WOCHENTAG", Zeile 8 ORA-04088: Fehler bei der Ausführung von Trigger 'DWP1138.T_I_ZEIT_WOCHENTAG' Meiner Ansicht nach ist alles korrek gecastet, ich habe es auch schon in anderen Cast Variationen versucht, aber es will einfach nicht funktionieren /o\ Vielleicht hat jemand von euch ja noch eine Idee? Hallo, Sieht nach einem Datenfehler aus (Die Meldung an und für sich ist ja klar) Vor allem : Speichere Datumswert NUR in Spalten vom Typ DATE, dann musst du solche Übungen gar nicht erst durchführen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Erdmann Geschrieben 24. April 2009 Autor Teilen Geschrieben 24. April 2009 Danke für die Antwort dbwizzard, ich hatte vorher (warum auch immer) die strikte Vorgabe das in Number Feldern zu machen, nun habe ich aber endlich doch die Erlaubnis bekommen es mit Date-Feldern machen zu dürfen, nun sollte das ganze eigentlich kein Problem mehr darstellen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Stefan_1 Geschrieben 27. April 2009 Teilen Geschrieben 27. April 2009 Hallo, zum einen darfst Du die Variable wochentag nicht in Hochkomma setzen, da es sich dann nicht mehr um Deine Variable handelt sondern um einen String mit Inhalt wochentag. Daher die Fehlermeldung. Ferne möchtest Du die Variable Wochentag in ein Datum casten und gibst als Format 'ddmmyyyy' an. Nimm jetzt mal für die Berechnung den 01.01.2009 her. Dann bekommst Du für wochentag 1012009 als Ergebnis. Du sagst aber dass das Datum 8 Stellen ('ddmmyyyy') haben muss. Das wird Dir auch noch einen Fehler liefern. Viele Grüße Stefan_1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.