Hallo, ich habe eine Funktion, die eine Tabelle liefern soll... die Objekte um die (variable Spaltenanzahl der) Tabelle anzuzeigen funktioniert und wird vor dieser Funktion aufgerufen. Ich erhalte jedoch immer einen Fehler:
Es tritt nun ein neuer Fehler auf, nachdem ich Ishinos Rat befolgt habe:
ORA-00932: Inconsistent Datatypes: ....
Es scheint so, als wenn er den Rückgabewert von EXECUTE IMMEDIATE nicht in v_row speichern kann - aber warum der Type wird jedesmal vor aufruf dieser Funktion mit entsprechender Spaltenanzahl angelegt...
Die Funktion Preis liefert einen Wert vom Typ Number.
Ich hoffe jemand sieht den Fehler...
Es tritt nun ein neuer Fehler auf, nachdem ich Ishinos Rat befolgt habe:
ORA-00932: Inconsistent Datatypes: ....
Es scheint so, als wenn er den Rückgabewert von EXECUTE IMMEDIATE nicht in v_row speichern kann - aber warum der Type wird jedesmal vor aufruf dieser Funktion mit entsprechender Spaltenanzahl angelegt...
Die Funktion Preis liefert einen Wert vom Typ Number.
Ich hoffe jemand sieht den Fehler...
Code:
create or replace
FUNCTION WARTUNGSKOSTENTABELLE
( Von IN DATE
, Bis IN DATE
) RETURN WARTUNGSKOSTENTABELLE_T PIPELINED AS
BEGIN
DECLARE
v_sqlquery VARCHAR(4000);
v_von DATE;
v_bis DATE;
v_maschine_wartung VIEW_MASCHINE_WARTUNG%ROWTYPE;
v_row WARTUNGSKOSTENTABELLE_R;
CURSOR maschine_wartung IS
SELECT
VIEW_MASCHINE_WARTUNG.MASCHINE_ID,
VIEW_MASCHINE_WARTUNG.MASCHINE_TYP_ID,
VIEW_MASCHINE_WARTUNG.ANSPRECHPARTNER_INTERN_ID,
VIEW_MASCHINE_WARTUNG.STANDORT_ID,
VIEW_MASCHINE_WARTUNG.WARTUNG_ID,
VIEW_MASCHINE_WARTUNG.RAHMENVERTRAG_ID,
VIEW_MASCHINE_WARTUNG.WARTUNGSVERTRAG_ID,
VIEW_MASCHINE_WARTUNG.MASCHINE_NAME,
VIEW_MASCHINE_WARTUNG.MASCHINE_SERIENNUMMER,
VIEW_MASCHINE_WARTUNG.MASCHINE_IDG,
VIEW_MASCHINE_WARTUNG.MASCHINE_ANLAGENNUMMER,
VIEW_MASCHINE_WARTUNG.MASCHINE_BST,
VIEW_MASCHINE_WARTUNG.MASCHINE_RKST,
VIEW_MASCHINE_WARTUNG.MASCHINE_KAUFVERTRAGSNUMMER,
VIEW_MASCHINE_WARTUNG.MASCHINE_BESCHREIBUNG,
VIEW_MASCHINE_WARTUNG.MASCHINE_GEWAEHRLEISTUNG_START,
VIEW_MASCHINE_WARTUNG.MASCHINE_GEWAEHRLEISTUNG_ENDE,
VIEW_MASCHINE_WARTUNG.MASCHINE_TYP,
VIEW_MASCHINE_WARTUNG.ANSPRECHPARTNER_INTERN,
VIEW_MASCHINE_WARTUNG.WARTUNGSVERTRAG_NUMMER,
VIEW_MASCHINE_WARTUNG.RAHMENVERTRAG_NUMMER,
VIEW_MASCHINE_WARTUNG.STANDORT,
VIEW_MASCHINE_WARTUNG.WARTUNG_LAUFZEIT_START,
VIEW_MASCHINE_WARTUNG.WARTUNG_LAUFZEIT_ENDE,
VIEW_MASCHINE_WARTUNG.WARTUNG_GEANDERT_AM,
VIEW_MASCHINE_WARTUNG.WARTUNG_GEKUENDIGT_ZUM,
VIEW_MASCHINE_WARTUNG.WARTUNG_HWSW,
VIEW_MASCHINE_WARTUNG.WARTUNG_BEMERKUNG,
VIEW_MASCHINE_WARTUNG.WARTUNG_BETRIEBSSYSTEM,
VIEW_MASCHINE_WARTUNG.WARTUNG_BACKUP,
VIEW_MASCHINE_WARTUNG.WARTUNG_LISTENPREIS_IG,
VIEW_MASCHINE_WARTUNG.WARTUNG_LISTENPREIS_OG,
VIEW_MASCHINE_WARTUNG.WARTUNG_RABATT,
VIEW_MASCHINE_WARTUNG.WARTUNG_ANZAHL,
VIEW_MASCHINE_WARTUNG.WARTUNG_WARTUNGSLEVEL
FROM
VIEW_MASCHINE_WARTUNG;
BEGIN
OPEN maschine_wartung;
LOOP
FETCH maschine_wartung INTO v_maschine_wartung;
v_von := TO_DATE('01.'||TO_CHAR(Von, 'MM.YYYY'), 'DD.MM.YYYY');
v_bis := TO_DATE('01.'||TO_CHAR(Bis, 'MM.YYYY'), 'DD.MM.YYYY');
v_sqlquery := 'SELECT ' || v_maschine_wartung.WARTUNG_ID;
LOOP
v_sqlquery := v_sqlquery || ', ' || Preis( v_von
, v_maschine_wartung.MASCHINE_GEWAEHRLEISTUNG_START
, v_maschine_wartung.MASCHINE_GEWAEHRLEISTUNG_ENDE
, v_maschine_wartung.WARTUNG_LAUFZEIT_START
, v_maschine_wartung.WARTUNG_LAUFZEIT_ENDE
, v_maschine_wartung.WARTUNG_GEKUENDIGT_ZUM
, v_maschine_wartung.WARTUNG_LISTENPREIS_IG
, v_maschine_wartung.WARTUNG_LISTENPREIS_OG
, v_maschine_wartung.WARTUNG_RABATT
, v_maschine_wartung.WARTUNG_ANZAHL );
v_von := ADD_MONTHS( v_von, 1 );
EXIT WHEN v_von > v_bis;
END LOOP;
v_sqlquery := v_sqlquery || ' FROM DUAL';
EXECUTE IMMEDIATE v_sqlquery INTO v_row;
PIPE row( v_row );
EXIT WHEN maschine_wartung%NOTFOUND;
END LOOP;
RETURN;
END;
END WARTUNGSKOSTENTABELLE;
Zuletzt bearbeitet: