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:
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).
das programm verwendet 2 curser die nach abhängigkeit abgefragt werden sollen.
Was mache ich falsch. Findet jemand den Fehler? Vielen Dank für Tips und Anregungen.
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
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;
Zuletzt bearbeitet: