ORACLE - MERGE Befehle

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.

Kann jemand sagen, was ich evtl. falsch mache?

Mahlzeit,

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.

Gruß

Sancho

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)

Hi!

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)

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 …

Grüße,
Tomh