iceQ7 Geschrieben 10. Februar 2011 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lupo49 Geschrieben 10. Februar 2011 Teilen Geschrieben 10. Februar 2011 Das sollte mit den Funktionen REPLACE und SUBSTR realisierbar sein. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
iceQ7 Geschrieben 11. Februar 2011 Autor Teilen 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 11. Februar 2011 Teilen 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ryoku83 Geschrieben 12. Februar 2011 Teilen 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: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
iceQ7 Geschrieben 22. Februar 2011 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dbwizard Geschrieben 23. Februar 2011 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.