Announcement

Collapse
No announcement yet.

In WHERE Spalte bei Laufzeit festlegen

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

  • In WHERE Spalte bei Laufzeit festlegen

    Hi Leutz,
    ich habe (vereinfacht) folgende Oracle-Tabellen (DB-Version ist 10g):

    Zeitmodelle:
    ZEITMODELL | VON | BIS | GUELTIG_MO | GUELTIG_DI ... GUELTIG_SO
    40H45 | 6:00 | 18:00 | -1 | 0 ... 0
    40H45 | 7:00 | 19:00 | 0 | -1 ... 0
    36H30 | 7:00 | 16:00 | 0 | -1 ... -1
    36H45 | 7:00 | 16:15 | -1 | 0 ... 0
    (-1 bedeutet Zeitmodell gültig für diesen Tag)

    Personenmeldungen:
    PSNR | ZEITMODELL | DATUM | VON | BIS
    1 | 40H45 | 11.8.08 | 6:00 | 18:15
    2 | 40H45 | 12.8.08 | 8:00 | 19:23

    Jetzt soll ich rausbekommen, wer länger geschafft hat, als im Zeitmodell vorgesehen.
    Manuell ist das kein Problem, da ich täglich in der Abfrage die Spalte ändern kann.
    Nun soll das ganze aber möglichst automatisch ablaufen.

    Kann mir jemand helfen, wie ich diesen Vorgang in eine Abfrage/Prozedur packen kann?
    Einfach würds mir auch helfen, wenn ich den Spaltenname zusammensetzen kann.
    Aber GUELTIG_ || TO_CHAR(SYSDATE-1,'DY')=-1 geht nicht.

    Die Abfrage sollte möglichst im Discoverer oder alternativ in Crystal Reports lauffähig sein.

    Danke
    Gruß
    Robert
    Zuletzt editiert von itzari; 13.08.2008, 16:15.

  • #2
    Mit EXECUTE IMMEDIATE lassen sich dynamische Anweisungen bauen (hier der Tabellenname):
    Code:
    DECLARE
       tsql   VARCHAR2 (255);
       icnt   NUMBER;
    BEGIN
       tsql := 'SELECT COUNT(*) FROM ALL_' || 'TABLES';
    
       EXECUTE IMMEDIATE tsql INTO icnt;
    
       DBMS_OUTPUT.put_line ('Die Anzahl ist ' || icnt);
    END;

    Comment


    • #3
      Originally posted by itzari View Post
      ...Aber GUELTIG_ || TO_CHAR(SYSDATE-1,'DY')=-1 geht nicht. ...
      Aber
      [highlight=sql]
      DECODE(TO_CHAR(SYSDATE-1,'DY'),
      'MO', GUELTIG_MO,
      'DI', GUELTIG_DI,
      ...) = -1
      [/highlight]
      Sollte gehen, wenn du kein dynamisches SQL einsetzen kannst.

      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


      • #4
        Hmm Spaltennamen lassen sich aber nicht dynamisch in einem statischen SQL ersetzen.
        Und darum geht s dem Kollegen wenn ich das richtig gelesen hab.
        Nur versteh ich nicht, warum er nicht einfach für jeden Tag ein eigenes SQL macht. Das wär das einfachste bei so einem vermurksten Datenmodell.

        Dim
        Zitat Tom Kyte:
        I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

        Comment


        • #5
          Der Tip von Falk funktioniert klasse. Danke
          Läßt sich auch im Discoverer einwandfrei nutzen

          Über die Variante von jum hab ich auch schon nachgedacht. Ist dann aber an meinen bisherigen Oracle-Kenntnissen gescheitert.

          Comment

          Working...
          X