Update-Befehl auf Oracle-Datenbank

kallkar

Grünschnabel
Hallo,

Ich möchte die Spalte einer Tabelle mit dem letzten Datum eines Datensatzes befüllen, der über mehrere Tabellen mit der zu bearbeitenden Tabelle verknüpft ist. Der Befehl lautet:

UPDATE FN_ReportDS fn
SET fn.T013 =
SELECT max(zs.Datum)
FROM ZaehlwerkStand zs, ZaehlerDef zd, ZaehlerZaehlwerkeDef zw, FN_ReportDS fn
WHERE fn.T014 = zd.ZaehlerID
and zd.ZaehlerID = zw.ZaehlerID
and zw.ZaehlwerkID = zs.ZaehlwerkID
and fn.ReportID = 1000116


Aufgetretener Fehler:
ORA-00936: Ausdruck fehlt


In meiner Anwendung bekomme ich auch noch diese Meldung:
SQLAendernUpdateAnDBAnpassen: Die Tabelle zum Alias FN_ReportDS fn wurde nicht im ersten Eintrag der Tabellenliste gefunden.

Habt Ihr eine Idee, wie ich den Befehl anpassen muss?

Vielen Dank vorab,

kallkar
 
Entweder kannst du den Subselect in eine Klammer setzen oder mit JOINS arbeiten.
SQL:
UPDATE 
	FN_ReportDS fn
SET fn.T013 = (
		SELECT 
			max(zs.Datum)
		FROM 
			ZaehlwerkStand zs, 
			ZaehlerDef zd, 
			ZaehlerZaehlwerkeDef zw, 
			FN_ReportDS fn
		WHERE 
			fn.T014 = zd.ZaehlerID
			AND zd.ZaehlerID = zw.ZaehlerID
			AND zw.ZaehlwerkID = zs.ZaehlwerkID)
WHERE fn.ReportID = 1000116

--oder

UPDATE 
	FN_ReportDS fn,
	(	SELECT max(zs.Datum) AS max_date, zd.ZaehlerID
		FROM 
			ZaehlwerkStand zs, 
			ZaehlerDef zd, 
			ZaehlerZaehlwerkeDef zw, 
			FN_ReportDS fn
		WHERE 
			fn.T014 = mx.ZaehlerID
			AND zd.ZaehlerID = zw.ZaehlerID
			AND zw.ZaehlwerkID = zs.ZaehlwerkID
		GROUP BY zd.ZaehlerID
	) mx	
SET 
	fn.T013 = mx.max_date
WHERE 
	fn.ReportID = 1000116
Wobei du fn 2 mal deklarierst und das ist nicht besonders hübsch.
Ev. stimmen meine Lösungen nicht, da du in deinem SQL ein rechtes Chaos hast das man ohne Kenntnisse der SB-Struktur nicht einfach so enträtseln kann.
 
Zuletzt bearbeitet von einem Moderator:
Zurück