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.
Die Fehlermeldung ist die folgende im Dbvisualizer:
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.
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
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]]
".. 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]]
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.
Comment