Oracle-Datenbank mit function

Ehemm , ja :-)

Also, dann mal ein Beispiel :

Zuerst die Funktion :

Code:
CREATE OR REPLACE 
FUNCTION        f_test_regexp (i_nmy_id IN NUMBER) 
 
    RETURN VARCHAR
IS
    l_sresult   VARCHAR2 (20);
BEGIN
    SELECT (REGEXP_REPLACE (TO_CHAR (i_nmy_id), '^(.)', 'N'))
      INTO l_sresult
      FROM DUAL;
 
 
    RETURN l_sresult;
EXCEPTION
    WHEN no_data_found
    THEN
        RETURN NULL;
END;
/

.... Dann eine Testtabelle ...mit ein paar Werten....

Code:
CREATE TABLE TEST_REGEXP
  (
  ID NUMBER
 )
/

INSERT INTO test_regexp 
VALUES(12545454);
INSERT INTO test_regexp 
VALUES(343435345);
INSERT INTO test_regexp 
VALUES(345345345);
INSERT INTO test_regexp 
VALUES(97666);
INSERT INTO test_regexp 
VALUES(55);
INSERT INTO test_regexp 
VALUES(1);

COMMIT;

..Und nun benutzen wir die Funktion in eine "stinknormalen" SQL :


Code:
SELECT a.id, f_test_regexp (a.id) AS umgewandelter_wert
  FROM test_regexp a;

..und kriegen als Ergebnis :

Code:
ID       	   UMGEWANDELTER_WERT
---------	   ------------------
12545454   N2545454          
343435345 N43435345         
345345345 N45345345         
97666    	   N7666             
55       	   N5                
1        	   N


Hoffe, dass hilft

Gruss


(Hmm...wie formatiert man SQL hier im Forum richtig ****?)
 
Zuletzt bearbeitet:
Also bis jetzt hat es mir noch nich geholfen!
Habe vorher auch nichts anders gemacht!
Nur hat meine Tabelle nicht nur diese eine Spalte kommt der Fehler vll. daher?

Gruß

Edit:
Ok hat funktioniert ^^

Vielen Dank!

Kann ich in die Funktion noch irgendwie reinbekommen, dass es auch Umgekehrt funktioniert!? Also wenn die Daten mit N beginnen das eine 1 hinkommt?
 
Zuletzt bearbeitet:
Vergiss das mit dem Umgekehrten! ^^
Nur wie kann ich ihm jetzt noch sagen das alle anderen Werte (die nicht mit 1 beginnen) eine U an erster Stelle haben sollen?

Was ich gerne noch wissen möchte, wäre wieso ich
in der Funktion schreibe bzw. für steht das?

Sorry dass ich so viel frage aber ich such schon so lange und komm auf keine gute Lösung!

Danke nochmal!
 
Hi,
ich habe das Probleme gelöst, durch mehrere regexp_replace Funktionen!
Nun stehe ich habe vor dem nächste Probleme, da ich es auch umgekehrt abfragen möchte, d.h. ich will das N durch eine 1 ersetzen oder ein M durch eine 6 und das in der gleichen Funktion! Ist das möglich, oder muss ich ein Package oderso erstellen?

Würde mich sehr über Vorschläge freuen!

Gruß Tim
 
Zuletzt bearbeitet:
Du kannst dies durch Dynamisches SQL lösen, indem du die beiden Werte als Parameter der Funktion übergibst und diese in dein SQL einbaust

BTW, Ich würde generell immer mit Packages arbeiten und nicht einzelne Funktionen / Prozeduren schreiben....

Gruss
 
Zurück