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:

ukulele

Datenbank-Guru
Beiträge
4.702
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.
 

db.wizard

Aktiver Benutzer
Beiträge
43
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...
 

PLSQL_SQL

SQL-Guru
Beiträge
176
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
 

milanj

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

akretschmer

Datenbank-Guru
Beiträge
9.851
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
 
Oben