Kommaseparierte Liste bei Prozedur-Frage

milanj

Benutzer
Beiträge
7
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!.
 
Werbung:
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.
 
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.

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...
 
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
 
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! :)
 
Werbung:
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.

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
 
Zurück
Oben