tutorials.de Buch-Aktion 02/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
16
ZUGRIFFE
588
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    roox2010 roox2010 ist offline Mitglied
    Registriert seit
    Aug 2010
    Beiträge
    14
    Hi,
    ich möchte aus meiner Datenbank (aus einer Spalte) Zahlen suchen und bei diesen die Anfangszahl durch einen Buchstaben ersetzen!

    Ich habe es mit der if-Klausel versucht, bis jetzt ohne Erfolg!

    Sieht wie folgt aus:

    if nummer = '1*' then
    nummer = 'N*'

    Das mit dem * funktioniert aber nicht, nun würde ich gern wissen wie ich das angebe, dass alle Zahlen die mit 1 beginnen gesucht werden und die 1 durch N ersetzt wird!

    Vielen Dank im Vorraus für eure Antworten!

    Grüße
    roox2010
     

  2. #2
    dbwizard dbwizard ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Ort
    Zürich
    Beiträge
    285
    Hallo,

    Kannst du deinen kompletten SQL posten ? Mit diesem Fragment ist Hilfe etwas schwer zu geben. Möchtest du die Werte in der Tabelle updaten oder nur den Ausgabwert umformatieren ?

    Gruss
     

  3. #3
    roox2010 roox2010 ist offline Mitglied
    Registriert seit
    Aug 2010
    Beiträge
    14
    Hi,

    create or replace function retour3
    return varchar2
    is retourenschluessel varchar2(30);

    begin

    if retourenschluessel like '1*' then
    retourenschluessel := 'N*';
    end if;

    return(retourenschluessel);

    end;


    Ich möchte den Ausgabewert umformatieren, aber es wäre nett wenn du/ihr mir zum Updaten auch einen Lösungsvorschlag machen könntet!

    Gruß
     

  4. #4
    dbwizard dbwizard ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Ort
    Zürich
    Beiträge
    285
    Hallo,

    Aber dein "Retourschlüssel" ist in einer Tabelle gespeichert ?
     

  5. #5
    roox2010 roox2010 ist offline Mitglied
    Registriert seit
    Aug 2010
    Beiträge
    14
    Hi,
    ja das ist er!
    Muss ich da dann noch einen Cursor erstellen?
    Also ich hätte gerne eine Funktion die mir den Schlüssel mit einem N anstatt der 1 am Anfang anzeigt und wenn es möglich ist auch wieder umgekehrt!

    Gruß
     

  6. #6
    dbwizard dbwizard ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Ort
    Zürich
    Beiträge
    285
    Zitat Zitat von roox2010 Beitrag anzeigen
    Hi,
    ja das ist er!
    Muss ich da dann noch einen Cursor erstellen?
    Also ich hätte gerne eine Funktion die mir den Schlüssel mit einem N anstatt der 1 am Anfang anzeigt und wenn es möglich ist auch wieder umgekehrt!

    Gruß
    Ich habe dir mal eine Funktion geschrieben, welche eine ID (Deinen PK in deiner Tabelle) entgegennimmt und die Umformatierung vornimmt. Voraussetzung dafür ist mindestens Oracle 10, da es mit Regexp arbeitet :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    
    FUNCTION 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_dound
        THEN
            RETURN NULL;
    END;


    - Diese Funktion liefert jeweils die Konversion für genau einen Datensatz, wenn du mehrer Row's verarbeiten willst, musst du einen Cursor implementieren und zurückgeben

    Gruss
    Geändert von dbwizard (25.08.10 um 14:12 Uhr)
     

  7. #7
    roox2010 roox2010 ist offline Mitglied
    Registriert seit
    Aug 2010
    Beiträge
    14
    Hi,
    für was steht denn in der Funktion das
    '^(.)'
    und geht es nicht mit IF?

    Gruß
    Geändert von roox2010 (25.08.10 um 14:55 Uhr)
     

  8. #8
    dbwizard dbwizard ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Ort
    Zürich
    Beiträge
    285
    Hallo, dies bedeutet "das Erste Zeichen (egal welches) in einem String"
     

  9. #9
    roox2010 roox2010 ist offline Mitglied
    Registriert seit
    Aug 2010
    Beiträge
    14
    Hi,
    also ich hab es mit der Funktion probiert, bekomme dann aber eine fehlermeldung:

    ORA-01422: exact fetch returns more than requested number of rows

    Woran könnte das liegen?
     

  10. #10
    dbwizard dbwizard ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Ort
    Zürich
    Beiträge
    285
    - Wie verwendest du diese Funktion ?
     

  11. #11
    roox2010 roox2010 ist offline Mitglied
    Registriert seit
    Aug 2010
    Beiträge
    14
    Ich will/soll die Funktion mit dem SQL-Developer verwenden!
     

  12. #12
    dbwizard dbwizard ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Ort
    Zürich
    Beiträge
    285
    Ehemm , ja

    Also, dann mal ein Beispiel :

    Zuerst die Funktion :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    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 :
    1
    2
    
    SELECT a.id, f_test_regexp (a.id) AS umgewandelter_wert
      FROM test_regexp a;

    ..und kriegen als Ergebnis :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
     
    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 ****?)
    Geändert von dbwizard (25.08.10 um 15:34 Uhr)
     

  13. #13
    roox2010 roox2010 ist offline Mitglied
    Registriert seit
    Aug 2010
    Beiträge
    14
    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?
    Geändert von roox2010 (25.08.10 um 15:57 Uhr)
     

  14. #14
    roox2010 roox2010 ist offline Mitglied
    Registriert seit
    Aug 2010
    Beiträge
    14
    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
    FROM DUAL
    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!
     

  15. #15
    roox2010 roox2010 ist offline Mitglied
    Registriert seit
    Aug 2010
    Beiträge
    14
    Hi,
    kann mir dazu keiner mehr einen Ratschlag geben?

    Gruß Tim
     

Ähnliche Themen

  1. Oracle Datenbank Connect
    Von AJAX Lauch im Forum Relationale Datenbanksysteme
    Antworten: 5
    Letzter Beitrag: 20.12.07, 14:37
  2. Verbindungsprobleme mit Oracle Datenbank
    Von tekilla209 im Forum Java
    Antworten: 33
    Letzter Beitrag: 07.11.07, 09:37
  3. Oracle Datenbank anlegen
    Von Balian im Forum Relationale Datenbanksysteme
    Antworten: 12
    Letzter Beitrag: 01.11.07, 15:27
  4. Import in Oracle 10g Datenbank
    Von liam im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 29.09.06, 18:47
  5. Oracle Datenbank
    Von riddler2kone im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 06.03.02, 09:54