Hallo ich habe zwei Tabellen in zwei verschiedenen DB-Schemen (selbe DB (Oracle 9)).
Ich habe mir ein Merge Befehl erstellt, der aber net funktioniert:
MERGE INTO (schema2.firma) target
USING (schema1.firma) source
ON (target.firma\_nr) = (source.firma\_nr)
WHEN MATCHED THEN
UPDATE SET (target.name = source.name,
target.beschreibung = source.beschreibung)
WHEN NOT MATCHED THEN
INSERT (firma\_nr, name, beschreibung)
VALUES (source.firma\_nr, source.name, source.beschreibung)
Er bringt immer die Fehlermeldung: „Ungültiger Tabellenname“.
Ich benutze dieses Oracle-Feature zum ersten mal. Die Tabellen schema2.firma und schema1.firma existieren definitiv - man kann auf sie problemlos ein SELECT loslassen.
Ich habe mir ein Merge Befehl erstellt, der aber net
funktioniert:
Zunächst einmal, laß überflüssige Klammern weg und setze sie korrekt ein, wenn sie nicht überflüssig sind:
MERGE INTO schema2.firma target
USING schema1.firma source
ON (target.firma\_nr = source.firma\_nr)
WHEN MATCHED THEN
UPDATE SET target.name = source.name,
target.beschreibung = source.beschreibung
WHEN NOT MATCHED THEN
INSERT (target.firma\_nr, target.name, target.beschreibung)
VALUES (source.firma\_nr, source.name, source.beschreibung)
Er bringt immer die Fehlermeldung: „Ungültiger Tabellenname“.
An welcher Stelle? Ich denke, bei der INSERT-Klausel.
Hallo Sancho,
der ganze befehl ist eigentlich schon richtig.
hab ein anderes db-tool getestet und da ging es dann. Man konnte auch ein paar klammern weglassen.
Ein drittes Tool konnte nicht mit dem alias der merge into anweisung nicht umgehen.
folgender befehl funktioniert:
MERGE INTO schema1.firma t
USING (SELECT firma\_nr, NAME, beschreibung
FROM schema2.firma) s
ON (t.firma\_nr = s.firma\_nr)
WHEN MATCHED THEN
UPDATE
SET t.NAME = s.NAME,
t.beschreibung = s.beschreibung
WHEN NOT MATCHED THEN
INSERT (t.firma\_nr, t.NAME,
t.beschreibung)
VALUES (s.firma\_nr, s.NAME, s.beschreibung)
MERGE INTO schema1.firma t
USING (SELECT firma_nr, NAME, beschreibung
FROM schema2.firma) s
ON (t.firma_nr = s.firma_nr)
WHEN MATCHED THEN
UPDATE
SET t.NAME = s.NAME,
t.beschreibung = s.beschreibung
WHEN NOT MATCHED THEN
INSERT (t.firma_nr, t.NAME,
t.beschreibung)
VALUES (s.firma_nr, s.NAME, s.beschreibung)
Könnte es sein - ohne mich mit dem Thema „MERGE“ bisher näher befaßt zu haben (ich weiß, daß es den Befehl gibt und kenne die Syntax so halbwegs) -, daß hier noch irgendwelche Berechtigungen vergeben werden müssen? Manchmal benötigt man unter Oracle die absurdesten Berechtigungen, um gewisse Sachen durchzuführen - ein TRUNCATE ist z.B. gar nicht mal so ohne …