Announcement

Collapse
No announcement yet.

Finde den Fehler in der Stored Procedure

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

  • Finde den Fehler in der Stored Procedure

    Guten Morgen,

    ich versuche seit einigen Tagen eine Stored Procedure mit DB2 zu erstellen, aber ich stoße ständig auf Fehler. Bis jetzt war ich immer in der Lage diese zu beseitigen, aber jetzt gerade habe ich keine Ahnung woran es scheitert. Muss dazu sagen, dass ich kein Experte bin was SQL angeht. Von daher hoffe ich, dass man mir dumme Fehler verzeiht.

    Zur Stored procedure: Im Prinzip sollte man den letzten Part (dynamic SQL) erstmal ignorieren. Darum kümmer ich mich noch.

    Code:
    CREATE PROCEDURE "ADDON21C"."SENDUNGSID_GET"
    (
            IN @FACHTABELLE Varchar(100),
            IN @MANDANT SMALLINT
    )
    LANGUAGE SQL
    SPECIFIC SQL120511110539400
    BEGIN
      DECLARE IDCOUNT INTEGER;
      DECLARE JAHR VARCHAR(10);
      DECLARE TAG VARCHAR(10) ;
      DECLARE KASSENNUMMER VARCHAR(2);
        
      SET Jahr = YEAR;
      SET TAG = '000' + DAY;
      SET TAG = RIGHT(Tag, 3);
      
      CASE @MANDANT
            WHEN '1'
            THEN SET KASSENNUMMER = '10';
            WHEN '2'
            THEN SET KASSENNUMMER = '11';
            WHEN '3'
            THEN SET KASSENNUMMER = '12';
            WHEN '4'
            THEN SET KASSENNUMMER = '13';
      END CASE;
      
      IF (SELECT COUNT(ID) FROM SENDUNGSIDCOUNT WHERE IMPORT_DATE = CURRENT DATE) = 0
            THEN
            SET IDCOUNT = '00000001';
      ELSE
            SET IDCOUNT = (SELECT row_number() over(ORDER BY ID) FROM SENDUNGSIDCOUNT WHERE IMPORT_DATE = CURRENT DATE);
      END IF;
     
      DECLARE MERGEINTOFACHTABELLE VARCHAR(200);
      SET MERGEINTOFACHTABELLE = 
      'MERGE INTO @FachTabelle As a 
      USING (SELECT Id (Jahr + Tag + KassenNummer + IDCOUNT) As SENDUNGSID FROM @FachTabelle) As b 
      ON a.id = b.id
      WHEN MATCH THEN UPDATE SET a.SENDUNGSID = b.SENDUNGSID
      WHERE a.SENDUNGSID = NULL';
      EXEC SQL MERGEINTOFACHTABELLE;
    
      INSERT INTO SENDUNGSIDCOUNT (IMPORT_DATE)
      VALUES (CURRENT DATE);
    END
    Die Fehlermeldung ist die folgende im Dbvisualizer:
    11:08:33 [CREATE - 0 row(s), 0.000 secs] [Error Code: -104, SQL State: 42601] Auf "SENDUNGSID = NULL'" folgte das unerwartete Token "EXEC SQL". Zu den möglichen Token gehören: "
    ".. SQLCODE=-104, SQLSTATE=42601, DRIVER=3.57.82
    ... 1 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.000/0.000 sec [0 successful, 0 warnings, 1 errors]]
    Kurz noch zu meinem Vorhaben wo der Fehler auftaucht:
    Ich habe eine Tabelle (SENDUNGSIDCOUNT), die 2 Spalten besitzt. Die einer Spalte ist der Primärschlüssel (ID) und die andere IMPORT_DATE die das Datum abbildet. Ich möchte nun die Zeilen zählen (bezogen auf das aktuelle Datum) und dann in die Variable IDCOUNT speichern. Ich bin mir nicht sicher ob ich dafür auch dynamic SQL brauche oder nicht ...

    Das Problem hat sich jetzt so weit erledigt. Jetzt hänge ich bei dem dynamic sql fest.
    Für Tipps wäre ich dankbar.
    Zuletzt editiert von julia86; 16.05.2012, 11:10.

  • #2
    Hallo,

    mit DB2 habe ich zwar schon lange nichts mehr gemacht, aber "SENDUNGSID = NULL" sollte meines Erachtens "SENDUNGSID is NULL" heissen.
    Vielleicht war#s dan dann schon.

    Gruß
    Uschi

    Comment

    Working...
    X