Announcement

Collapse
No announcement yet.

Define Var mit Default Wert

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

  • Define Var mit Default Wert

    Hallo

    Ich möchte ein Script schreiben, dass es möglich macht den Namen des Kunden und den Zeitraum von - bis auszuwählen. Werden keine Variablen per Eingabe definiert sollen min und max datum sowie alle Kunden ausgewählt werden. Hierbei wird auf folgendes Schema zugegriffen:

    SALES_ORDER
    --------------------
    order_date

    UND

    CUSTOMER
    --------------------
    name

    Mein Lösung schaut bislang so aus:

    Code:
    select s.order_date, c.name
    from sales_order s, customer c
    where s.order_date between '&var_startdate' and '&var_enddate' and
    c.name like '&var_cname'||'%'
    Danke für eure Hilfe!

  • #2
    Hallo,

    sieh dir dazu mal die Funktionen NVL() und DECODE() an. Auf deine Variablen angewendet sollte sich damit eine Lösung finden lassen.

    Anm.: Deine Abfrage ist momentan ein Kreuzprodukt, da du keine Beziehung zwischen sales_order und customer berücksichtigst!

    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
      &var_startdate und die anderen musst du füllen. Im Zweifel mit einer leeren Zeichenkette. Zum Abfrage der Variable bietet sich das accept an. Da du damit zumindest anzeigen kannst, welches Format du erwartest.

      accept var_startdate char format a10 prompt "Start Date DD.MM.YYYY :"

      Du benötigst ein NVL2, da du ein else Zweig brauchst :

      s.ORDER_date BETWEEN NVL2(TRIM('&var_startdate'),TO_DATE('&var_startdat e','dd.mm.yyyy'),TO_DATE('01.01.0001','dd.mm.yyyy' )
      AND NVL2(TRIM('&var_enddate'),TO_DATE('&var_enddate',' dd.mm.yyyy'),TO_DATE('01.01.0001','dd.mm.yyyy')
      AND NVL2('&var_cname',c.name,1) LIKE NVL2('&var_cname', '&var_cname'||'%',1)

      Und wie Falk schon schreibt: Denk an dein Cartesisches Produkt

      Comment


      • #4
        Sinngemäß das Gleiche, vielleicht einen Tick einfacher.

        Code:
        select s.order_date, c.name
          from sales_order s, customer c
         where 7=7
           and s.order_date between to_date(nvl('&var_startdate', '01.01.0001'), 'dd.mm.yyyy') and 
                                    to_date(nvl('&var_enddate', '31.12.9999'), 'dd.mm.yyyy') 
           and (c.name like '&var_cname'||'%' or '&var_cname' is NULL)
        Wenn was schief gehen kann, dann geht es auch schief bzw. wenn man sich einen Fehler nicht erklären kann und dem nicht auf den Grund geht, hat das immer schlimme Folgen.

        Comment


        • #5
          Originally posted by DiddlMouse View Post
          Sinngemäß das Gleiche, vielleicht einen Tick einfacher.

          Code:
          select s.order_date, c.name
            from sales_order s, customer c
           where 7=7
             and s.order_date between to_date(nvl('&var_startdate', '01.01.0001'), 'dd.mm.yyyy') and 
                                      to_date(nvl('&var_enddate', '31.12.9999'), 'dd.mm.yyyy') 
             and (c.name like '&var_cname'||'%' or '&var_cname' is NULL)
          Danke für die Infos!

          Für was ist "where 7=7"?

          Gruß

          Comment


          • #6
            Originally posted by timtaylor View Post
            Danke für die Infos!

            Für was ist "where 7=7"?

            Gruß
            Eine Marotte Wenn ich die Reihenfolgen der AND’s verschieben möchte, muss ich so auf das WHERE keine Rücksicht nehmen. Hat auf das Ergebnis Null Wirkung!
            Wenn was schief gehen kann, dann geht es auch schief bzw. wenn man sich einen Fehler nicht erklären kann und dem nicht auf den Grund geht, hat das immer schlimme Folgen.

            Comment


            • #7
              Danke!!!!!!

              Comment

              Working...
              X