Zum Inhalt springen
  • 0

Oracle 11g R2 sql/eine Tabelle mit Hilfe einer anderen aktualisieren


Gast Teddi

Frage

Hallo ihr lieben ich habe folgendes Problem und brauche euch. Danke im voraus. (Ich bin auf Oracle 11g R2)

Ich habe auf 2 verschiedenen oracle Server(orcl1 und orcl2) die gleiche Tabelle mit folgender Struktur. 

compag_orcl1
 
username | id | compag
--------------------------
USER1     |us1id1| CMR
USER1     |us1id1| RWD
USER1     |us1id1| SING
USER1     |us1id1| CNG
--------------------------
USER2     |us2id2| SEN
USER2     |us2id2| CND
USER2     |us2id2| CGT
USER2     |us2id2| CNG
USER2     |us2id2| KPG
--------------------------
USER3     |us3id3| RWD
USER3     |us3id3| CND
USER3     |us3id3| CID
USER3     |us3id3| CNG
USER3     |us3id3| SING

Und ihre Kopie auf orcl2

compag_orcl2
username | id | compag
--------------------------
USER1     |us1id1| RWD
USER1     |us1id1| SING
USER1     |us1id1| CNG
--------------------------
USER2     |us2id2| SEN
USER2     |us2id2| CNG
USER2     |us2id2| KPG
--------------------------
USER3     |us3id3| RWD
USER3     |us3id3| CND
USER3     |us3id3| SING

Ich möchte gern in compag_orcl2 die  fehlenden Zeilen aus compag_orcl1,  die mit "C" anfangen,  einfügen. 

DAnke nochmal für eure Mühe

Link zu diesem Kommentar
Auf anderen Seiten teilen

10 Antworten auf diese Frage

Empfohlene Beiträge

  • 0

Lieber Whiz-zarD Danke!! 

Ich habe inzwischen die meine ErgebnisMenge bekommen können.  

Zum Einfügen habe ich mir eine Funktion geschrieben,  die leider noch nicht so tut was sie soll.

***** Korrektur:  ich hatte vorhin die Spalte in beiden Tabellen die Spalte seq vergessen. Daher nochmal die TabellenStruktur. ****

create or replace function comp (p_error OUT VARCHAR2)
RETURN BOOLEAN
is
 
cursor compa_cur is
 
select * from compag_orcl1@orcl1 c1
 
where c1.compag like 'C%'
   and not exists (select 1
                     from compag_orcl2 c2
                    where c1.username  = c2.username 
                      and c1.id   = c2.id
                      and c1.compag = c2.compag);
 
compa_tmp compa_cur%ROWTYPE;
 
begin
 
open compa_cur ;
 
loop
 
fetch compa_cur into compa_tmp;
 exit when compa_cur%NOTFOUND;
 
insert into compag_orcl2 (USERNAME, 
                     compag,  
                     id, 
                     Seq)
 
values (compa_cur.username,
        compa_cur.compag,
         compa_cur.id,
        Seq_cmp.nextval);
    commit; 
 
   end loop;
 
        close compa_cur;
   return true; 
end comp;
compag_orcl1
 
username | id | compag| seq
--------------------------------------
USER1     |us1id1| CMR| 123
USER1     |us1id1| RWD| 456
USER1     |us1id1| SING| 789
USER1     |us1id1| CNG | 1011
------------------------------------
USER2     |us2id2| SEN | 1213
USER2     |us2id2| CND | 1415
USER2     |us2id2| CGT | 1617
USER2     |us2id2| CNG | 1819
USER2     |us2id2| KPG | 2021
------------------------------------
USER3     |us3id3| RWD| 2223
USER3     |us3id3| CND | 2425
USER3     |us3id3| CID  | 2627
USER3     |us3id3| CNG | 2829
USER3     |us3id3| SING| 3031

und die Kopie auf orcl2

 

compag_orcl2
username | id | compag |seq
-------------------------------------
USER1     |us1id1| RWD|0010
USER1     |us1id1| SING|0011
USER1     |us1id1| CNG |0012
------------------------------------
USER2     |us2id2| SEN|0013
USER2     |us2id2| CNG|0014
USER2     |us2id2| KPG|0015
-----------------------------------
USER3     |us3id3| RWD|0016
USER3     |us3id3| CND|0017
USER3     |us3id3| SING|0018
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0

PL/SQL ist doch überhaupt nicht von Nöten.

Merge:

MERGE INTO compag_orcl2 dest
USING (SELECT * FROM compag_orcl1) src
ON (src.username = dest.username
    AND src.id = dest.id
    AND src.compag = dest.compag)
WHEN NOT MATCHED THEN 
  INSERT (username, id, compag, seq)
  VALUES (src.username, src.id, src.compag, Seq_cmp.nextval)

Insert Into:

INSERT INTO compag_orcl2 (username, id, compag, seq)
SELECT  compag_orcl1.username,
        compag_orcl1.id,
        compag_orcl1.compag,
        Seq_cmp.nextval
FROM    compag_orcl1
WHERE   NOT EXISTS (
          SELECT  *
          FROM    compag_orcl2 
          WHERE   compag_orcl1.username = compag_orcl2.username
                  AND compag_orcl1.id = compag_orcl2.id
                  AND compag_orcl1.compag = compag_orcl2.compag
        );

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
vor 17 Stunden schrieb Whiz-zarD:

 

Danke Whiz-zarD.

Leider funktioniert das Merge nicht indem die fehlenden "compag" Zeilen nicht eingefügt werden. 

Das insert löst mein Problem mit der Sequenz nicht so wirklich. Weil du holst ja die seq.nextval aus orcl1. 

Was mache ich mit meiner Sequenz auf orcl2? 

Danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
vor 59 Minuten schrieb Tedi:

Leider funktioniert das Merge nicht indem die fehlenden "compag" Zeilen nicht eingefügt werden. 

Verstehe ich nicht, was du meinst. Er nimmt die Spalte aus orcl1 und schreibt sie in orcl2. Wenn er beim Merge in orcl2 kein Datensatz findet, der zu der Bedingung passt, dann wird ein neuer Datensatz in orcl2 angelegt.

vor 58 Minuten schrieb Tedi:

Was mache ich mit meiner Sequenz auf orcl2? 

Indem du einfach die Sequence von orcl2 nimmst. Wo ist das Problem?

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 0
vor 19 Stunden schrieb Whiz-zarD:

 

Danke Whiz-zarD.

Leider funktioniert das Merge nicht indem die fehlenden "compag" Zeilen nicht eingefügt werden. 

Das insert löst mein Problem mit der Sequenz nicht so wirklich. Weil du holst ja die seq.nextval aus orcl1. 

Was mache ich mit meiner Sequenz auf orcl2? 

Danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...