Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Kommaseparierte Liste bei Prozedur-Frage

Dieses Thema im Forum "Oracle" wurde erstellt von milanj, 28 August 2012.

  1. milanj

    milanj Benutzer

    Hallo, weiss jemand wie ich eine komma separierte Liste erstelle. Beispielsweise:

    Habe eine Procedur mit Parameter:
    CREATE PROCEDURE gib_name (name varchar2 )
    IS
    BEGIN
    .............
    ............
    END

    Beim Aufruf der Prozedur möchte ich mehrere von den Parametern angeben, also kommasepariert,welches dan zu den namen bestimmte IDs in eine temporäre tabelle reinschreibt., beispielswise:

    EXECUTE gib_name ('torsten', 'matthias', 'tobi' ) /*<----so ist es aber nicht möglich*/

    Wie würde das gehen wenn ich in dem Aufruf der Prozedur dann mehrere Argumente reinschreibe, die aber vom selben Typ des parameters sind?.

    Bin euch sehr dankbar!.
     
  2. ukulele

    ukulele Datenbank-Guru

    Du kannst die Prozedur nur mehrfach mit jeweils einem neuen Parameter aufrufen oder dir einen String basteln und diesen innerhalb der Prozedur wieder zerlegen, was ich aber vermeiden würde. Ein anderer Weg wäre eine temporäre Tabelle, die von der Prozedur abgearbeitet wird. Du kannst jedenfalls keine dynamische Anzahl an Werten für einen Parameter übergeben.
     
  3. db.wizard

    db.wizard Aktiver Benutzer

    Ich würde eine Collection als IN Parameter definierenoder alternativ einen SYS.XMLTYPE , verweise hierbei auf die Lösung hier : http://entwickler-forum.de/showthread.php?71318-Dynamische-Anzahl-an-Werten-f%FCr-Parameter...
     
  4. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    Hy,

    ich würde mir einen Datenbankdatentyp selbst erstellen und diesen "STRINGARRAY" taufen....

    Weiters noch via "PUBLIC" granten und du kannst ihn überall in der DB verwenden! Anschließend müsstest du in deiner Prozedur nur den Parameter durch-loopen!

    Lg
     
  5. milanj

    milanj Benutzer

    Supper, hat geklappt!. Vielen Dank!
     
  6. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    Super!

    Nur zur Vollständigkeit...

    Wie hast du dies nun gelöst? Kannst du vl. ein Beispielscript posten!!! Danke und Lg!
     
  7. milanj

    milanj Benutzer

    Sorry für die späte Antwort. Unten ein Beispielscript. Das Fetgedruckte ist der teil des Codes welcher die kommaseparierte Liste ermöglicht.


    CREATE OR REPLACE
    PROCEDURE gib_name (name varchar2,)
    IS
    BEGIN
    INSERT INTO temporaere_tabelle (spalteInTemporaereTabelle)
    SELECT DISTINCT account_id
    FROM account

    WHERE NAME in (select regexp_substr(name,'[^,]+', 1, level) from dual
    connect by regexp_substr(name, '[^,]+', 1, level) is not null)

    END;

    So, jetzt kann man beim Execute der Prozedur, mehrere Parameter übergeben, also kommasepariert. z.B.:

    EXECUTE gib_name ('Thomas,Hans,Michal');

    Hoffe hat euch was gebracht.

    Liebe Grüsse! :)
     
  8. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    Hy,

    danke fürs posten!

    Lg
     
  9. akretschmer

    akretschmer Datenbank-Guru

    Hallo,

    da ich weiß, daß Du wohl mit PG spielen willst: http://www.depesz.com/2008/07/31/waiting-for-84-variadic-functions/

    Damit kann man Funktionen schreiben, die eine variable Anzahl an Parametern aufnehmen ;-) Das geht mit PG seit Ende 2008.

    Andreas
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden