iceQ7 Geschrieben 10. Februar 2011 Geschrieben 10. Februar 2011 Hallo zusammen, zuerst möchte ich nur erwähnen, dass ich völliger Neueinsteiger in Sachen PL/SQL bin und mich gerade mit einfachen SQL-Statements befasse und daher nur beschränkt auskenne. Folgendes Problem: Wir haben im Unternehmen zwei Oracle-Datenbanken, einmal eine Test-Datenbank (TEST) und eine Produktiv-Datenbank (PROD). In gewissen Zeitabständen wird die PROD-Db auf die TEST-Db kopiert. Alles schön und gut soweit, jedoch haben wir einige Einträge in Tabellen, welche massiv Ärger machen. Dazu wurde ich beauftragt, das per "Update"-Funktion zu beheben. Generell habe ich keinerlei Probleme mit simplen Update-Befehlen, jedoch ist das für mich nun ein wenig kniffliger. Beispiel: E-MailLink ------------------ abc=PRODdef ghi=PRODjkl mno=PRODpqr stu=PRODvwx Wie bereits erkannt, ist in den Datensätzen der Spalte "E-MailLink" die Zeichenfolge PROD integriert. Das führt auf unserem TEST-System zu massiven Problemen. Wie muss jetzt der Update-Befehl (ich schätze Replace wird hierfür benötigt?) lauten, um NUR PROD durch TEST zu ersetzen? Beispiel: E-MailLink ------------------ abc=TESTdef ghi=TESTjkl mno=TESTpqr stu=TESTvwx Um jede hilfreiche Antwort wäre ich sehr dankbar! Freundliche Grüße iceQ7
lupo49 Geschrieben 10. Februar 2011 Geschrieben 10. Februar 2011 Das sollte mit den Funktionen REPLACE und SUBSTR realisierbar sein.
iceQ7 Geschrieben 11. Februar 2011 Autor Geschrieben 11. Februar 2011 Vielen Dank erst einmal für die schnelle Antwort! Ich bräuchte jedoch ein "fertiges" Script, da ich in diesem Fall absolut keine Ahnung habe, wie genau ich REPLACE/SUBSTR setzen muss, um das gewünschte Ergebnis zu erhalten...
dr.dimitri Geschrieben 11. Februar 2011 Geschrieben 11. Februar 2011 Einfach so: Update deine_tabelle set emaillink=replace (emaillink,'PROD','TEST'); commit; Fertig. Da brauchst kein PL/SQL. Dim PS: Die Spalte heißt nicht wirklich e-maillink (also mit Bindestrich) oder?
ryoku83 Geschrieben 12. Februar 2011 Geschrieben 12. Februar 2011 Einfach so: Update deine_tabelle set emaillink=replace (emaillink,'PROD','TEST'); commit; Fertig. Da brauchst kein PL/SQL. Dim PS: Die Spalte heißt nicht wirklich e-maillink (also mit Bindestrich) oder? schnelle und ganz richtige Antwort :cool:
iceQ7 Geschrieben 22. Februar 2011 Autor Geschrieben 22. Februar 2011 Erst einmal vielen Dank an dr.dimitri für die schnelle Hilfe! Ich kann hier nur mit PL/SQL arbeiten, da wir keine anderen Werkzeuge zur Verfügung haben... Neues Problem für mich: Wir haben dämlicherweise jede Menge Dubletten in einer bestimmten Tabelle. Nun sollen aber alle Dubletten dieser Tabelle bis auf einen Datensatz gelöscht werden. Beispiel: noteslink | lastname ------------------------ abc=PRODdef | meier abc=PRODdef | meier abc=PRODdef | meier abc=PRODdef | meier abc=PRODdef | meier Es ist völlig egal, welcher der 5 Datensätze übrig bleibt, hauptsache einer. Kann man sozusagen eine Spalte mit fortlaufenden Zahlen "temporär" hinzufügen? Somit wärs einfacher Datensätze zu löschen... Hat sonst einer eine brauchbare Idee oder ein brauchbares SQL-Statement für mich? Vielen Dank Grüße iceQ7
dbwizard Geschrieben 23. Februar 2011 Geschrieben 23. Februar 2011 .... Wir haben dämlicherweise jede Menge Dubletten in einer bestimmten Tabelle. Nun sollen aber alle Dubletten dieser Tabelle bis auf einen Datensatz gelöscht werden. ... Hallo, Doppelte Datesätze kannst du mit folgender Methode selektieren (Das Attribut "Name" soll hier geprüft werden) : SELECT name FROM Test a WHERE ROWID <> (SELECT MAX (ROWID) FROM Test b WHERE b.name = a.name); Das Löschen sollte anschliessend kein Problem darstellen... Grüsse
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden