Cursor in verbindung mit SELECT für NEWBIE

Hallo Leute ,

ich will eine Liste ausgeben , die aus zwei verschiedene Select-Abfrage stamm. Ich will dass Ergebnis meine Rechnungen in eine variable speichern und das als output meine Funktion nacher ausgeben.

Ich bekomme die folgende Fehlermeldung.

FEHLER: SELECT kann nicht als Cursor geöffnet werden
CONTEXT: PL/pgSQL function “test” line 101 at FOR over SELECT rows.

CREATE FUNCTION test (feld integer)
RETURNS text

AS $$

DECLARE


ROW_DATA text := ‘’;
ROW_DATEN text := ‘’;
text_output text := ‘’;



FOR row_daten IN SELECT V_BSM_LOOKUP_KU, SUM(N_BETR_AL),SUM(N_BETR_HO),SUM(N_BETR_FG)
INTO TEMP
FROM VW_MBU_BKS,PO
WHERE I_AKTE_AKTE_ID = PO.I_AKTE_AKTE_ID_PO
GROUP BY V_BSM_LOOKUP_KU
LOOP



IF (V_BSM_LOOKUP_KU_TEMP = ‘U1’) THEN

N_SUM_AL_U1_LOCL = COALESCE(N_SUM_AL_TEMP, 0);
N_SUM_HO_U1_LOCL = COALESCE(N_SUM_HO_TEMP, 0);
N_SUM_FG_U1_LOCL = COALESCE(N_SUM_FG_TEMP, 0);
END IF;

IF (V_BSM_LOOKUP_KU_TEMP = ‘U2’) THEN

N_SUM_AL_U2_LOCL = COALESCE(N_SUM_AL_TEMP, 0);
N_SUM_HO_U2_LOCL = COALESCE(N_SUM_HO_TEMP, 0);
N_SUM_FG_U2_LOCL = COALESCE(N_SUM_FG_TEMP, 0);
END IF;

IF (V_BSM_LOOKUP_KU_TEMP = ‘S1’) THEN

N_SUM_AL_S1_LOCL = COALESCE(N_SUM_AL_TEMP, 0);
N_SUM_HO_S1_LOCL = COALESCE(N_SUM_HO_TEMP, 0);
N_SUM_FG_S1_LOCL = COALESCE(N_SUM_FG_TEMP, 0);
END IF;

IF (V_BSM_LOOKUP_KU_TEMP = ‘S2’) THEN

N_SUM_AL_S2_LOCL = COALESCE(N_SUM_AL_TEMP, 0);
N_SUM_HO_S2_LOCL = COALESCE(N_SUM_HO_TEMP, 0);
N_SUM_FG_S2_LOCL = COALESCE(N_SUM_FG_TEMP, 0);
END IF;

END LOOP;
N_SUM_AUSLAGEN_AUSGANG_PO = N_SUM_AUSLAGEN_AUSGANG_LOCL;
N_SUM_HONORAR_BERECHNET_PO = N_SUM_HONORAR_BERECHNET_LOCL;
N_SUM_FREMDGELD_AUSGANG_PO = N_SUM_FREMDGELD_AUSGANG_LOCL;

N_SALDO_HONORAR_PO = N_SALDEN_HONORAR_LOCL;
N_SALDO_AUSLAGEN_PO = N_SALDEN_AUSLAGEN_LOCL;
N_SALDO_FREMDGELD_PO =N_SALDEN_FREMDGELD_LOCL;
N_GESAMTSALDO_PO = N_GESAMTSALDO_LOCL;
END LOOP;
RETURN N_GESAMTSALDO_PO;
END;
$$language plpgsql;


Danke für Ihre Hilfe.

Dein ‘row_daten’ ist TEXT, Dein Select liefert was anderes.


Andreas

Ich habe die Variable auf Integer gesetzt, das ändert sich nix. Es kommt die gleiche Fehlermeldung.

Ein:

SELECT V_BSM_LOOKUP_KU, SUM(N_BETR_AL),SUM(N_BETR_HO),SUM(N_BETR_FG)

liefert die V_BSM_LOOKUP_KU und 3 Summen. Das paßt leider nicht ganz in einen INT. Daher sollte man dafür einen RECORD nehmen.

Andreas

Danke , es funkionniert :slight_smile:

Schön, was genau funktioniert jetzt und wie funktioniert das?
Was hast du geändert und wo lag der Fehler?

Schließlich wollen andere daraus vielleicht auch mal etwas lernen :wink:

Wie kann ich wiederum das Ergebnis in eine temporäre Tabelle speichern?

FOR rec IN SELECT a, b, c
INTO temp
FROM tabelle

FEHLER: SELECT kann nicht als Cursor geöffnet werden

INSERT INTO table SELECT …

Oder in Deiner Schleife a la INSERT INTO table (col1, col2) VALUES (myrec.col1, myrec.col2)


Andreas

nochmal Danke.