2016-04-06 25 views
0

Ich schreibe ein Perl-Skript, das Daten aus wenigen Tabellen in DB1 in Tabellen in DB2 kopiert. Ich habe eine Tabelle in DB3, die Einfügeabfrage für jede in DB2 vorhandene Tabelle enthält.Kopieren von Daten von einem DB in einen anderen DB

Unten finden Sie eine Abfrage für eine Tabelle.

Insert into ACTION_BLOCK 
(ACTION_BLOCK_ID, RULE_EXPR_ID, ACTION_BLOCK_ORDER) 
Values(); 

Ich dachte an

  1. Lesen von Daten aus DB1 für einen Tisch und Last Ergebnis einer Hash unter Logik implementieren.
  2. Für jedes Element in der Hash-
    • Ersetzen Werte() Schlüsselwort in Insert-Abfrage mit VALUES ('Daten in hash')
    • das Insert in DB2 Abfrage ausführen.

Aber Daten in DB könnte auch enthalten Datum. In diesem Fall kann ich values() Schlüsselwort in der Frage mit values('data in hash') nicht direkt ersetzen, da ich das Format des Datums erwähnen muss (wie dd\mm\yyyy nach dem Wert). Kann mir jemand helfen, diese Herausforderung zu meistern.

Um es unten zB mehr betrachten klar .:

DB1 und DB2 eine Tabelle ACTION_BLOCK genannt haben. Ich muss Daten in DB1_ACTION_BLOCK Tabelle zu DB2_ACTION_BLOCK Tabelle kopieren.

Nach meiner Logik, ich wähle INSERT-Abfrage für ACTION_BLOCK Tabelle von DB3, die wie unten sein wird.

Insert into ACTION_BLOCK 
(ACTION_BLOCK_ID, RULE_EXPR_ID,RULE_DATE,ACTION_BLOCK_ORDER) 
Values(); 

In der obigen Abfrage ersetze ich die „Werte()“ mit-ten Daten keyword ich von DB1 bekam, die, wie unten dargestellt ist:

values(01,02,02/02/2016,09); 

als das Datumsformat Dies wirft mir Fehler nicht richtig. Im Idealfall sollte es wie unten dargestellt werden:

values(01,02,to_date('02/02/2016','mm/dd/yyyy'),09); 

Aber meine Hash, die die Daten von DB1 enthalten müssen nur das Datum ohne dass to_date Schlüsselwort und Format.

Ich hoffe, dieses Beispiel zeigt das Problem deutlich.

+0

Dies ist ein wenig unklar. Kannst du ein vollständiges Beispiel mit Sachen erstellen, die in allen drei Datenbanken enthalten sind und was die erwartete Ausgabe sein soll? – simbabque

+0

Sie sagen, dass 'DB3' tatsächlichen SQL-Code enthält? – Borodin

+0

DB3 enthält Einfügeabfragen für jede Tabelle in DB2. – nithin

Antwort

0

In reiner SQL, würden Sie nur schreiben:

INSERT INTO DB2.dbo.ACTION_BLOCK 
select * from DB1.dbo.ACTION_BLOCK 

Nur, dass Ihr Onkel in Perl, und Bob einpacken!

Verwandte Themen