geschrieben von:
christian_goto (---.dip0.t-ipconnect.de)
ja. dein select ist schon ok :)
im prinzip steht da:
berechne was from zeiterfassung where.....
das ergebniss in ALLE zeilen (spalte zeiterfassungs.dauer) schreiben.
das liegt daran, das deine where clause für dein select gilt,aber nicht für das update.
so wird ein schuh draus:
UPDATE ZEITERFASSUNG SET ZEITERFASSUNG.DAUER =
(select (ZEITERFASSUNG.ARBEITSENDE_DATUM - ZEITERFASSUNG.ARBEITSBEGINN_DATUM)*24 diff_hours
from ZEITERFASSUNG
WHERE ZEITERFASSUNG_ID = :P7_ZEITERFASSUNG_ID)
WHERE ZEITERFASSUNG_ID = :P7_ZEITERFASSUNG_ID;
edit/
wenn das sowieso immer berechnet werden soll würde ich das über einen trigger machen:
CREATE OR REPLACE TRIGGER ZEITERFASSUNG_DAUER_TRG AFTER INSERT OR UPDATE on "ZEITERFASSUNG" FOR EACH ROW
BEGIN
UPDATE ZEITERFASSUNG
SET
usw usw.
der vorteil wäre erstens:
der trigger rechnet direkt an der datenbank und der update ebfehl muss nicht vom client gesendet werden.
zweitens:
for each row bewirkt, dass die zeiterfassungs_id gar nicht benötigt wird.
wenn die werte arbeitsbeginn und arbeitsende geschrieben werden wird im hintergrund die dauer ausgerechnet.
gruss
4 mal bearbeitet. Zuletzt am .