Veröffentlicht 10. Februar 201114 j 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
11. Februar 201114 j 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...
11. Februar 201114 j 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?
12. Februar 201114 j 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:
22. Februar 201114 j 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
23. Februar 201114 j .... 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
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.