Announcement

Collapse
No announcement yet.

Kommaseparierte Werte in eine Variable (PL/SQL)

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

  • Kommaseparierte Werte in eine Variable (PL/SQL)

    Hallo Leute,

    ich bräuchte eure Hilfe wieder. Mein Problem:
    Ich möchte in eine Procedure eine Variable verwenden. Die soll aber Kommaseparierten Werte speichern (z.B. 1,18,19). Die Variable heißt in_md und ist von Typ NUMBER.

    Meine Abfrage:

    Code:
    PROCEDURE jubileumsrückstellung (in_md in number)
    execute immediate 'CREATE TABLE REP_JUBILÄUMSRÜCKSTELLUNG AS
                ( SELECT DISTINCT
                       L.MANDANT MDT,
                       L.P_NUMMER PNR,
                       L.P_NAME NACHNAME,
                       L.P_VORNAME VORNAME,
                       case
                          when L.P_GESCHLECHT = ''M'' then
                                1
                          else
                                2
                       end GESCHLECHT,
                       L.P_GEB_DAT GEBURTSDATUM,
                       (SELECT max(ZW_EINTR.EINTRITTSDATUM)
                        FROM ZW_EINTRITTSDATUM ZW_EINTR
                        WHERE  ZW_EINTR.P_NUMMER = L.P_NUMMER
                        AND ZW_EINTR.MANDANT = L.MANDANT) EINTRITTSDATUM,
                        (
                         SELECT DISTINCT max(austritt)
                         FROM austritt_view AV
                         WHERE  AV.p_nummer = L.p_nummer
                         AND AV.mandant = L.mandant
                         )AUSTRITT,
                       case
                            when L.P_ANG_ARB = ''A'' then
                                 2
                            else
                                 3
                       end Gruppe,
                       NVL(TO_CHAR(T.Teilzeitfaktor,''099.00''),''100.00'') TEILZEITFAKTOR,
                       --NVL( T.Teilzeitfaktor, 100) TEILZEITFAKTOR,
                       (SELECT SUM(EIN.betrag)
                        FROM   EINKOMMEN_VIEW EIN
                        WHERE  EIN.P_NUMMER = L.P_NUMMER
                        AND    EIN.MANDANT = L.MANDANT) EINKOMMEN
    
                FROM LPERS1 L,EINKOMMEN_VIEW E,
                     ZW_TEILZEITFAKTOR T
                WHERE T.mandant(+) = L.MANDANT
                AND T.P_NUMMER(+) = L.P_NUMMER
                AND E.p_nummer = L.p_nummer
                AND E.mandant = L.mandant
                AND L.p_sperr_kz = 0
                AND L.MANDANT IN ( '|| in_md || ')
    
                )';
    Kann bitte jemand helfen?

    Mit freundlichen Grüßen. f_mal

  • #2
    Hallo f_mal,

    Die soll aber Kommaseparierten Werte speichern (z.B. 1,18,19). Die Variable heißt in_md und ist von Typ NUMBER.

    Das schließt sich aber aus. Du kannst keinen String in eine Number speichern. Also würde ich ein VARCHAR2 vorschlagen und beim Select einfach so wie gehabt.

    Oder hab ich etwas falsch verstanden.

    lg Dietmar

    Comment


    • #3
      Hallo Dietmar,

      danke für deine schnelle Antwort.

      Mit eine varchar2 habe ich schon probiert, es geht aber irgendwie nicht.

      Ich habe im Moment keine Ahnung wie ich weiter machen soll.
      Hast Du noch eine Idee?

      Danke. florian

      Comment


      • #4
        Hallo Florian,

        wie Dietmar bereits gesagt hat: in_md muss ein VARCHAR2 sein. Wie es weiter geht, haengt von L.MANDANT ab.
        • Handelt es sich dabei um eine NUMBER Spalte, dann muessen die Werte in in_md so drinnen stehen: 1,18,19

        • Handelt es sich um eine VARCHAR2- Spalte, dann muessen die Werte in Hochkomma eingeschlossen sein, in deinem Beispiel also: '1','18','19'.
        Aber: da du mit execute immediate eine Zeichenkette ausführst, müssen die Hochkommas verdoppelt werden, also ''1'',''18'',''19''

        Somit ergibt sich in der auszuführenden Zeichenkette
        im Falle der NUMBER- Spalte
        ... AND L.MANDANT IN (1,18,19)
        im Falle der VARCHAR2- Spalte:
        ... AND L.MANDANT IN ('1','18','19')

        Gruß
        Thomas

        Comment


        • #5
          hallo,

          Vielen Dank für die schnelle Lösung. Es funktioniert..

          Danke

          mfg. f_mal

          Comment

          Working...
          X