Und ich glaube, du hast da ein kleines Wort am Ende vergessen:
Code: Alles auswählen
Set :LAST_ZWECK = :ZWECK;
Moderator: thorben.braun
Code: Alles auswählen
Set :LAST_ZWECK = :ZWECK;
Code: Alles auswählen
execute block
as
declare id int;
declare zweck varchar(100);
declare last_zweck varchar(100) = '';
begin
for select rid_buchungen, verwendungszweck
from buchungen
where rid_buchungen > 0
order by verwendungszweck
into :id, :zweck do
begin
if (:zweck = :last_zweck ) then
begin
update buchungen
set verwendungszweck = :zweck || ' R' || :id
where rid_buchungen = :id;
end
last_zweck = :zweck;
end
end
Code: Alles auswählen
EXECUTE BLOCK
AS
DECLARE VARIABLE ID BI;
DECLARE VARIABLE ZWECK XTXT;
DECLARE VARIABLE LAST_ZWECK XTXT = '';
BEGIN
FOR
SELECT
RID_BUCHUNGEN,
VERWENDUNGSZWECK
FROM
BUCHUNGEN
WHERE
RID_BUCHUNGEN > 0
ORDER BY
VERWENDUNGSZWECK ASC
INTO :ID, :ZWECK
DO
BEGIN
UPDATE
BUCHUNGEN
SET
EDITDATE = '".date("Y-m-d H:i:s", time())."',
VERWENDUNGSZWECK = SUBSTRING(TRIM(:ZWECK || ' R' || :ID) FROM 1 for 300)
WHERE
RID_BUCHUNGEN = :ID;
END
END;
Code: Alles auswählen
EXECUTE BLOCK
AS
DECLARE VARIABLE ID BI;
DECLARE VARIABLE ZWECK XTXT;
DECLARE VARIABLE LAST_ZWECK XTXT = '';
BEGIN
FOR
SELECT
RID_BUCHUNGEN,
VERWENDUNGSZWECK
FROM
BUCHUNGEN
WHERE
RID_BUCHUNGEN > 0
ORDER BY
VERWENDUNGSZWECK ASC
INTO :ID, :ZWECK
DO
BEGIN
IF ( ZWECK = LAST_ZWECK ) THEN
UPDATE
BUCHUNGEN
SET
EDITDATE = '".$_SESSION['HeuteDb']." ".$_POST['Startzeit']."',
VERWENDUNGSZWECK = SUBSTRING(TRIM(:ZWECK || ' R' || :ID) FROM 1 for 300)
WHERE
RID_BUCHUNGEN = :ID;
END
LAST_ZWECK = ZWECK;
END;
Code: Alles auswählen
EXECUTE BLOCK
AS
DECLARE VARIABLE ID BI;
DECLARE VARIABLE ZWECK XTXT;
DECLARE VARIABLE LAST_ZWECK XTXT = '';
BEGIN
FOR SELECT
RID_BUCHUNGEN,
VERWENDUNGSZWECK
FROM
BUCHUNGEN
WHERE
RID_BUCHUNGEN > 0
ORDER BY
VERWENDUNGSZWECK ASC
INTO :ID, :ZWECK
DO
BEGIN
IF (ZWECK = LAST_ZWECK) THEN BEGIN
UPDATE
BUCHUNGEN
SET
EDITDATE = '".date("Y-m-d H:i:s", time())."',
VERWENDUNGSZWECK = SUBSTRING(TRIM(:ZWECK || ' R' || :ID) FROM 1 for 300)
WHERE
RID_BUCHUNGEN = :ID;
END
LAST_ZWECK = ZWECK;
END
END
Ich hätte ihn nicht in Kleinbuchstaben umwandeln sollenjetzt erst habe ich gesehen, dass Du mir einen modifizierten "EXECUTE BLOCK" hier eingestellt hast.
Der funktioniert, zumindest bei mir, NICHT, enthält wohl aber den entscheidenden Tipp, der mir weitergeholfen hat.
Eher das begin - end der for-select do-Schleife. Das fehlte. Das begin end fürs if brauchst Du eigentlich nicht, da das if selber klammert, aber ohne begin-end nur ein Statement. Da Du im if nur das update statement hast, würde das reichen ohne begin-end beim if. Klarer ist aber häufig ein begin end, auch wenn es nicht nötig ist.Und zwar das "BEGIN" hinter dem "THEN" im IF-Statement !!!
Gerne. Es waren also nur zwei Sachen: Ein kaputter php-Treiber und im body der for-select Schleife fehlte die Aktualisierung der Vergleichsvariablen last_zweck.Folgender Block funktioniert jetzt bei mir, zumindest in meiner Labor-DB: ...
Das Ergebnis sieht auf den ersten Blick sehr vielversprechend aus.
Dafür meinen herzlichen Dank.
ja. Es lohnt sich, wenn Daten nicht zum Client transportiert werden müssen. Schön, dass es läuft.Hamburgo hat geschrieben: Do 19. Mai 2022, 15:32 Der "EXECUTE BLOCK" erledigt die Aufgabe in ca. 15 Sekungen gegenüber 4 Minuten bei der Client-Variante. Das ist echt cool.