Oracle 9.2; PL/SQL thema, iteration, schleife läuft nicht durch

tplanitz

Erfahrenes Mitglied
Hallo,
evtl. kann mir jemand helfen ich steh gerade auf dem Schlauch und finde den fehler nicht. Das PL/SQL programm
soll IN jeder zeile die device nummer und deren daten für anrufe ausgeben, siehe beispiel:
Die Ursprungsdaten sind auf 2 Tabellen verteilt wo ich einmal alle devices und deren model namen zu stehen habe, und einmal alle anrufe zu den devices in der anderen tabelle.

Das ist die ausgabe die ich brauche:
Code:
A_DE A_DATA                                                                     
---- -------------------------------------------------------                    
0815 1 = 08-JUN-05 2 = 13-JUN-05 3 = 27-SEP-05                                  
0816 1 = 18-JAN-05 2 = 27-JUN-05 3 = 11-DEZ-06 4 = 21-DEZ-06
Leider wird immer nur das erste device gefunden, und dessen daten für die Anrufe geschrieben.
Die anderen geräte werden zwar angezeigt, aber es werden keine daten gefunden (obwohl Anrufe getätigt wurden).
Code:
A_DE A_DATA                                                                     
---- -----------------------------------------                                  
0815 1 = 08-JUN-05 2 = 13-JUN-05 3 = 27-SEP-05                                  
0816

das programm verwendet 2 curser die nach abhängigkeit abgefragt werden sollen.
PHP:
DECLARE
TYPE r_device IS RECORD (
a_device_id t_device.a_device_id%TYPE,
a_device_model_name t_device_model.a_device_model_name%TYPE
);
TYPE r_call_up IS RECORD (
a_device_id t_device.a_device_id%TYPE,
a_timestamp_call_up t_call_message.a_timestamp_call_up%TYPE
);

-- tabellentype -> deviceat
TYPE tt_device IS TABLE OF r_device
	INDEX BY BINARY_INTEGER;
-- cursor zum einlesen
CURSOR c_device RETURN r_device
	IS 	SELECT a_device_id , a_device_model_name
			FROM t_device
			join t_device_model USING (a_device_model_id)
		  WHERE a_device_id > '0815'
-- tabelle mit datensatztyp
v_DDaten tt_device;
-----------------------------------------------------
-- tabellentype -> deviceat call_up
TYPE tt_call_up IS TABLE OF r_call_up
	INDEX BY BINARY_INTEGER;
-- cursor zum einlesen
CURSOR c_call_up RETURN r_call_up
	IS 	SELECT a_device_id, a_timestamp_call_up 	a_timestamp_call_up
			FROM t_call_message
			WHERE a_device_id > '0815'
			AND  a_timestamp_call_up 	IS NOT NULL
			ORDER BY a_device_id;
-- tabelle mit datensatztyp
v_DDaten2 tt_call_up;
-----------------------------------------------------

-- Zaehler
	i_device number (3) := 1;
	i_call_up NUMBER (3) := 1;


BEGIN
	OPEN c_device;
	OPEN c_call_up;
	LOOP
	EXIT WHEN c_device%ROWCOUNT = 10;

			FETCH c_device INTO v_DDaten (i_device);


			FETCH c_call_up INTO  v_DDaten2 (i_call_up);

			Dbms_Output.put(i_device  || i_call_up || '  ' || v_DDaten(i_device).a_device_id || ' ist ein ' || v_DDaten (i_device).a_device_model_name || ' !!  ' );

			IF 	v_DDaten2(i_call_up).a_device_id =	v_DDaten(i_device).a_device_id THEN
				 	WHILE v_DDaten2(i_call_up).a_device_id =	v_DDaten(i_device).a_device_id LOOP << dates_of_call >>
						Dbms_Output.put (i_call_up || ' = ' || SubStr (v_DDaten2(i_call_up).a_timestamp_call_up,1,10) );
		  			i_call_up := i_call_up +1;
						FETCH c_call_up INTO  v_DDaten2 (i_call_up);
 					END LOOP;
			END IF;
			dbms_output.new_line;
		  i_device := i_device+1;

 	END LOOP;
		dbms_output.new_line;

	CLOSE c_device;
	CLOSE c_call_up;
END;
Was mache ich falsch. Findet jemand den Fehler? Vielen Dank für Tips und Anregungen.
 
Zuletzt bearbeitet:
Zurück