Announcement

Collapse
No announcement yet.

Variable Anzahl von Parametern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Variable Anzahl von Parametern

    Hallo,

    ich muss in pl SQL eine Stored Procedure schreiben, bei der eine unterschiedliche Anzahl an Variablen übergeben wird.

    Also einmal könnte es sein
    mySP(Name, Sortierung)
    mySP(Name, Sortierung, SpalteA_Alt, SpalteA_Neu)
    mySP(Name, Sortierung, SpalteA_Alt, SpalteA_Neu, SpalteB_Alt, SpalteB_Neu) mySP(Name, Sortierung, SpalteA_Alt, SpalteA_Neu, SpalteB_Alt, SpalteB_Neu, SpalteC_Alt, SpalteC_Neu)
    ...

    Nun kann ich ja nicht 100 verschiedene SPs erzeugen, damit alle Variationen abgedeckt sind und daher hab ich mir überlegt, 1-2 Aggregate zu übergeben.

    entweder
    mySP(Name, Sortierung, aggrSpalte_Alt, aggrSpalte_Neu) (genauer gesagt sind das dann nur zwei Listen)

    oder

    mySP(Name, Sortierung, aggrSpalte)
    wobei aggrSpalte aus den Elementen Alt und Neu besteht

    Leider habe ich keinen blassen Schimmer von PL SQL. Hatte bisher nur mit MS-SQL zu tun.

    Bin für jede Hilfe dankbar

    Phönix

  • #2
    Hallo Phönix,

    du könntest dir z.B. einen eigenen Type als Container erzeugen. Deine Prozedur erhält dann nur die beiden Parameter für Alt und Neu, die jeweils eine (un)beschränckte Anzahl an Werten enthalten können. Als Container stehen Index-By-Tabellen, Verschachtelte Tabellen und VARRAYs zur Verfügung. Für dein Vorhaben würde sich eine Index-By-Tabelle anbieten.
    [highlight=sql]
    create or replace TYPE TParamType as
    TABLE OF VARCHAR2(255) INDEX BY binary_Integer;

    create or replace procedure mySP(
    Name nameType,
    Sortierung sortierungType,
    aggrSpalte_Alt TParamType,
    aggrSpalte_Neu TParamType) AS
    ...
    [/highlight]

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hall Falk,

      danke schön, werd mal schaun wie ich damit zurecht komme. Ist dieser neue Typ dann fix in der DB gespeichert oder ein temporärer Typ, der nur zur Laufzeit der Procedure besteht?

      Gruß

      Phönix

      Comment


      • #4
        Originally posted by Phönix View Post
        ...Ist dieser neue Typ dann fix in der DB gespeichert oder ein temporärer Typ, der nur zur Laufzeit der Procedure besteht?...
        Hallo Phönix,

        das kommt darauf an, wie du den Typ anlegst. Mit dem gen. Create-Statement wird es ein "gloabler" Typ in der Datenbank. Wenn du ihn dagegen in einem Package-Header mit
        [highlight=sql]
        TYPE TParamType AS
        TABLE OF VARCHAR2(255) INDEX BY binary_Integer;[/highlight]
        deklarierst, dann ist der Typ "vorrangig" in diesem Package gültig, kann aber weiterhin über PackageName.TParamType referenziert werden.

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment

        Working...
        X