Hallo,
ich bekomme bei Folgender Funktion diese Fehlermeldung:
FEHLER: cannot EXECUTE a null querystring
CONTEXT: PL/pgSQL function "kblatt_rekurs" line 86 at execute statement
SQL-Anweisung »SELECT dueker.kblatt_rekurs( $1 , $2 , $1 , $2 , $3 , $4 , $5 , $6 )«
PL/pgSQL function "kblatt_pos" line 62 at perf
Das hier ist die Funktion:
/***********************************************************************
* Funktion zur Aufbereitung der KBlatt Tabellenteile.
* Übertrag in eine temporäre Tabelle für die Zuordnung zum
* übergeordneten Artikel und Vergabe der jeweiligen Stufe.
***********************************************************************/
DECLARE
stufe integer; --Jeweilige Stufe des Artikels
haupt_sn varchar(40); --Satznummer KBlatt des Oberartikels (fertiges Teil)
haupt_art varchar(40); --Satznummer des Oberartikels (fertiges Teil)
zeilen integer; --Anzahl der Zeilen bei SELECT Statement (wird für IF-Konstrukt benötigt)
stufe0 RECORD; --RECORD zum durch-iterieren der Datensätze
mandant varchar; --Mandantennr
xkalk_art_id varchar; --ID des fertigen Artikels (mandant und sn)
xkalk_art varchar; --Artikelnr des fertigen Artikels
stmt varchar; --SQL Statement
BEGIN
stufe:= 0;
mandant:= mandantennr;
--Temporäre Tabelle anlegen
stmt:= 'CREATE TEMPORARY TABLE tmp_kblatt_pos (';
stmt:= stmt || 'tkalk_art_id varchar(35), ';
stmt:= stmt || 'tkalk_art varchar(30), ';
stmt:= stmt || 'tmandantennr varchar(5), ';
stmt:= stmt || 'telement_id varchar(35), ';
stmt:= stmt || 'tstufe varchar(3), ';
stmt:= stmt || 'telementtyp varchar(3), ';
stmt:= stmt || 'tkalk_menge numeric(16,6), ';
stmt:= stmt || 'tmengeneinheit varchar(6), ';
stmt:= stmt || 'tvorgabezeit numeric(16,6), ';
stmt:= stmt || 'tbfrist numeric(9,6), ';
stmt:= stmt || 'tgewicht numeric(16,6), ';
stmt:= stmt || 'tkblatt_id varchar(30), ';
stmt:= stmt || 'tfehler varchar(4), ';
stmt:= stmt || 'tkalk_typ varchar(35), ';
stmt:= stmt || 'tegeinzk numeric(18,6), ';
stmt:= stmt || 'teggemeink numeric(18,6), ';
stmt:= stmt || 'teggesamk numeric(18,6), ';
stmt:= stmt || 'tkostentyp varchar(13), ';
stmt:= stmt || 'telem_sn_id varchar(50), ';
stmt:= stmt || 'PRIMARY KEY (telem_sn_id, tkostentyp, tkalk_art)';
stmt:= stmt || ') without oids;';
EXECUTE stmt;
FOR stufe0 IN SELECT _sn, _art FROM duk.kblatt_k LOOP
--Erste Schleife Stufe 0 (komplette kblatt_k Tabelle)
haupt_sn:= stufe0._sn;
haupt_art:= stufe0._art;
xkalk_art_id := mandant || '_' || haupt_art;
SELECT artikel_k_id INTO xkalk_art FROM dueker.dim_artikel_kopf WHERE sn_kopf_id = xkalk_art_id;
SELECT COUNT(*) INTO zeilen FROM duk.kblatt_pos WHERE _sn = haupt_sn AND arch = 0;
IF zeilen <> 0 THEN
-- Funktionsaufruf der rekursiven Funktion
[U] PERFORM dueker.kblatt_rekurs(haupt_sn, haupt_art, haupt_sn, haupt_art, mandant, stufe, xkalk_art, xkalk_art_id);[/U]
ELSE
-- nichts
END IF;
END LOOP;
--PERFORM dueker.kblatt_pos_fuellen();
END
Die Unterstrichene Zeile ist die in der Fehlermeldung angemeckerte Zeile.
Und die Funktion, die aus dieser Funktion ausgerufen wird:
/***********************************************************************
* Funktion zur Aufbereitung der KBlatt Tabellenteile - rekursiver Teil.
* Ruft sich bei finden von weiteren Unterstufen wieder selbst auf.
* Übertrag in die Tabellen im Mandant dueker und vergabe, Zuordnung zum
* Übergeordneten Artikel und Vergabe der jeweiligen Stufe.
***********************************************************************/
DECLARE
haupt_sn varchar; --Satznummer übergeordnetes KBlatt_kopf (fertiger Artikel)
haupt_art varchar; --Satznummer übergeordneter Artikel (fertiger Artikel)
artikel_sn varchar; --Satznummer Artikel in der Fertigungsliste
stufen_sn varchar; --Satznummer KBlatt_kopf von untergerodneten ARtikeln aus der FL
xtemp varchar; --Temporäre Variable
stufe integer; --Aktuelle Stufe des Teil im Bezug auf Oberartikel (fertiges Teil)
rec record; --RECORD zum durchiterieren der Datensätze
ergebnis integer; --Ergebnis der SELECT Abfrage (für IF-Konstrukt)
stmt1 varchar; --SQL Statement
stmt varchar; --SQL Statement
mandant varchar; --Mandantennr
xkalk_art_id varchar; --ID des fertigen Artikels (mandant und sn)
xkalk_art varchar; --Artikelnr des fertigen Artikels
BEGIN
haupt_sn := hauptsn;
haupt_art := hauptart;
artikel_sn := artikelsn;
stufen_sn := stufensn;
mandant := mandantennr;
stufe := pstufe + 1;
xkalk_art_id := kalkartid;
xkalk_art := kalkart;
--zu füllende Felder in der Temp-Tabelle auswählen
stmt1:= 'INSERT INTO tmp_kblatt_pos (';
stmt1:= stmt1 ||'tkalk_art_id,';
stmt1:= stmt1 ||'tkalk_art,';
stmt1:= stmt1 ||'tmandantennr,';
stmt1:= stmt1 ||'telement_id,';
stmt1:= stmt1 ||'tstufe,';
stmt1:= stmt1 ||'telementtyp,';
stmt1:= stmt1 ||'tkalk_menge,';
stmt1:= stmt1 ||'tmengeneinheit,';
stmt1:= stmt1 ||'tvorgabezeit,';
stmt1:= stmt1 ||'tbfrist,';
stmt1:= stmt1 ||'tgewicht,';
stmt1:= stmt1 ||'tkblatt_id,';
stmt1:= stmt1 ||'tfehler,';
stmt1:= stmt1 ||'tkalk_typ,';
stmt1:= stmt1 ||'tegeinzk,';
stmt1:= stmt1 ||'teggemeink,';
stmt1:= stmt1 ||'teggesamk,';
stmt1:= stmt1 ||'tkostentyp, ';
stmt1:= stmt1 ||'telem_sn_id ';
stmt1:= stmt1 ||') VALUES(';
--Felder in der Temp-Tabelle füllen
FOR rec IN SELECT * FROM duk.kblatt_pos WHERE _sn = stufen_sn AND arch = 0 LOOP
stmt:= stmt1 || '\'' || xkalk_art_id || '\', '; --tkalk_art_id
stmt:= stmt || '\'' || xkalk_art || '\', '; --tkalk_art
stmt:= stmt || '\'' || mandant || '\', '; --tmandantennr
xtemp:= cast (mandant ||'_'||rec._elem as varchar(35));
stmt:= stmt || '\'' || xtemp || '\', '; --telement_id
stmt:= stmt || '\'' || stufe || '\', '; --tstufe
stmt:= stmt || '\'' || rec._elart || '\', '; --telementtyp
stmt:= stmt || '\'' || rec._ekmge || '\', '; --tkalk_menge
stmt:= stmt || '\'' || rec._ele || '\', '; --tmengeneinheit
stmt:= stmt || '\'' || rec._evzeit || '\', '; --tvorgabezeit
stmt:= stmt || '\'' || rec._ebfrist || '\', '; --tbfrist
stmt:= stmt || '\'' || rec._egewicht || '\', '; --tgewicht
xtemp:= cast(mandant ||'_'|| rec._ekblatt as varchar(30));
stmt:= stmt || '\'' || xtemp || '\', '; --tkblatt_id
stmt:= stmt || '\'' || rec._efehler || '\', '; --tfehler
stmt:= stmt || '\'' || rec._typ || '\', '; --tkalk_typ
stmt:= stmt || '\'' || rec._egeinzk || '\', '; --tegeinzk
stmt:= stmt || '\'' || rec._eggemeink || '\', '; --teggemeink
stmt:= stmt || '\'' || rec._eggesamk || '\', '; --teggesamk
stmt:= stmt || '\'' || rec._ekart || '\', '; --tkostentyp
xtemp:= rec._sn || '_' || rec._elem;
stmt:= stmt || '\'' || xtemp || '\''; --telem_sn_id
stmt:= stmt || ');';
EXECUTE stmt;
END LOOP;
END
Vielleicht kann mir ja jemand helfen, ich weiss nicht wo ich den Fehler suchen muss…