SQL in Oracle DB Feld updaten

warducK

Ensign
Registriert
Nov. 2009
Beiträge
237
Moin Leute,

ich habe ein Problem in einer OracleDB.
Und zwar soll ich hier aus bestimmten Feldern einen Teilstring entfernen. Da ich leider bisher nur mit "standard" SQL Statements gearbeitet habe, stehe ich hier vor Neuland und bin für jegliche Hilfe dankbar!

Ich bin mir schonmal sehr sicher, dass es hier mit einfachen UPDATES nicht getan ist und ich das Problem mit einer Prozedur lösen muss.

Folgende Situation:
In einem Feld(FeldX) meiner Datenbank steht zum Beispiel folgendes:
"Berechtigung1, Berechtigung2, Berechtigung3"

Jetzt will ich diese Tabelle(TabelleX) nach allen Datensätzen durchsuchen in denen "Berechtigung2" vorkommt und genau diesen Teilstring herauslöschen.

Das Ergebnis nach der Prozedur sollte sein:
"Berechtigung1, Berechtigung3"

Kann mir jemand helfen wie ich das anstellen kann?

Mein gedanken dazu:

Ich brauch nen SQL der mir die betroffenen Datensätze raussucht.
PHP:
SELECT FeldX FROM TabelleX WHERE FeldX LIKE '%Berechtigung2%';

Dieses ergebnis müsste ich in einer Schleife (in Prozeduren anscheinend per loop) durchlaufen und das entsprechende Feld bearbeiten. Genau hier liegt allerdings meine Wissenlücke(also eine von vielen ;-))

Vielen Dank schonmal!
 
Oracle erlaubt das Suchen und Ersetzen mittels Regulären Ausdrücken, such da mal nach. Geht meines Wissens allerdings erst ab Oracle 10.
 
sollte mittels replace(a,b,c) gehen.
update TabelleX set FeldX = replace(FeldX, 'Berechtigung2,');

a=wo
b=was
c=durch was, default ist ein Leerstring
 
hey, danke Leute, das hat soweit schonmal spitzenmäßig funktioniert :-)

Jetzt habe ich nur den anreiz, die Lösung entwas eleganter zu gestalten.
Ich muss nämlich nicht nur eine Berechtigung da rauslöschen, sondern ca. 300 ;-)

Da ich es für unelegant halte 300 verschiedene Updates zu benutzen, frage ich mich, ob es eine Möglichkeit gibt die replace Funktion mit einem "IN" oder so zu verbinden?
 
Hallo warducK,


dann ist es sinnvoll eine Funktion zu verwenden.
Hier ist ein tolles Beispiel:


PHP:
CREATE FUNCTION dbo.udf_replace (@str VARCHAR(50))

RETURNS VARCHAR(50) AS
BEGIN
	SET @str = REPLACE (@str,'-','')
	SET @str = REPLACE (@str,'/','')
	SET @str = REPLACE (@str,' ','')
	SET @str = REPLACE (@str,'.','')
	SET @str = REPLACE (@str,',','')
	SET @str = REPLACE (@str,'  ','')
	SET @str = REPLACE (@str,'   ','')
	SET @str = REPLACE (@str,'+','')
	SET @str = REPLACE (@str,'*','')
	SET @str = REPLACE (@str,'^','')

  RETURN @str 	-- oder auch: 
		-- Lower(@str)

END

PHP:
Select dbo.udf_replace(Feld) AS Test
bzw. 
UPDATE TabelleX SET FeldX = dbo.udf_replace(FeldX);
 
Zurück
Oben