Hallo
ich habe es soweit hinbekommen, dass bei einem Eintrag (Spalten: Subject und Item_id) der genauso in der Import Tabelle vorhanden ist, der Eintrag aus der subject_item Tabelle gelöscht wird.
sobald nur ein Eintrag also nur eine Spalte bereits vorhanden ist soll er einen Fehler ausspucken und sagen wo der Fehler liegt
und sobald noch kein Eintrag vorhanden ist sollen die Werte in die Tabelle subject_item gespeichert werden.
jetzt habe ich zum einen das Problem, dass ich die Output Lines nicht auf dem Bildschirm haben möchte, sondern in eine Logdatei geschriebenw erden soll, doch wie kann ich das realisieren? Mit Spool funktioniert es irgendwie nicht so richtig.
Des weiteren habe ich noch das Problem, dass ich einen Import von einer CSV Datei in die Temp (Import) Tabelle haben möchte. also zwei Werte in die Tabelle eintragen aus einer csv Datei mit Semikolon getrennt. wie kann ich das umsetzen?
hier mein bisheriges Script
set serveroutput on size unlimited;
--spool 'D:\protokoll.log'
declare
cursor delete_cursor is
select sa.sap_map_temp.subject, sa.sap_map_temp.item_id
from sa.sap_map_temp
inner join sa.sap_map_subject_item
on (sa.sap_map_temp.item_id = sa.sap_map_subject_item.item_id
and sa.sap_map_temp.subject = sa.sap_map_subject_item.subject);
cursor import_cursor is
select sa.sap_map_temp.subject, sa.sap_map_temp.item_id
from sa.sap_map_temp
where (
sa.sap_map_temp.item_id not in
(select item_id from sa.sap_map_subject_item)
and
sa.sap_map_temp.subject not in
(select subject from sa.sap_map_subject_item)
);
-- doppelte Subject Einträge
cursor fehler_cursor_subject is
select sa.sap_map_temp.subject, sa.sap_map_temp.item_id
from sa.sap_map_temp
where (
sa.sap_map_temp.subject in
(select subject from sa.sap_map_subject_item)
and sa.sap_map_temp.item_id not in
(select item_id from sa.sap_map_subject_item)
);
-- doppelte Item_ID Einträge
cursor fehler_cursor_item is
select sa.sap_map_temp.subject, sa.sap_map_temp.item_id
from sa.sap_map_temp
where (
sa.sap_map_temp.item_id in
(select item_id from sa.sap_map_subject_item)
and sa.sap_map_temp.subject not in
(select subject from sa.sap_map_subject_item)
);
rec_imp import_cursor%ROWTYPE;
feh_imp_item fehler_cursor_item%ROWTYPE;
feh_imp_subject fehler_cursor_subject%ROWTYPE;
del_imp delete_cursor%ROWTYPE;
begin
dbms_output.put_line('Protokoll vom: '||TO_CHAR(sysdate,'DD.MM.YYYY hh:mi:ss PM'));
open delete_cursor;
loop
fetch delete_cursor into del_imp;
exit when delete_cursor%NOTFOUND;
delete from sa.sap_map_subject_item where item_id =del_imp.item_id;
delete from sa.sap_map_temp where item_id=del_imp.item_id; --löscht den Eintrag, nachdem es in das Protokoll geschrieben wurde
dbms_output.put_line('deleted: '||del_imp.subject|| ' --- ' || del_imp.item_id );
end loop;
close delete_cursor;
open fehler_cursor_subject;
loop
fetch fehler_cursor_subject into feh_imp_subject;
exit when fehler_cursor_subject%NOTFOUND; --wird beendet sobald bei letzter Zeile angekommen
delete from sa.sap_map_temp where item_id=feh_imp_subject.item_id; --löscht den Eintrag, nachdem es in das Protokoll geschrieben wurde
dbms_output.put_line('ERROR Subject: '||feh_imp_subject.subject|| ' --- ' || feh_imp_subject.item_id||' manuelle Kontrolle notig');
end loop;
close fehler_cursor_subject;
open fehler_cursor_item;
loop
fetch fehler_cursor_item into feh_imp_item;
exit when fehler_cursor_item%NOTFOUND; --wird beendet sobald bei letzter Zeile angekommen
delete from sa.sap_map_temp
where item_id=feh_imp_item.item_id; --löscht den Eintrag, nachdem es in das Protokoll geschrieben wurde
dbms_output.put_line('ERROR Item : '||feh_imp_item.subject|| ' --- ' || feh_imp_item.item_id||' manuelle Kontrolle notig');
end loop;
close fehler_cursor_item;
open import_cursor;
loop
fetch import_cursor into rec_imp;
exit when import_cursor%NOTFOUND; --wird beendet sobald bei letzter Zeile angekommen
insert into sa.sap_map_subject_item (item_id, subject)
values (rec_imp.item_id, rec_imp.subject);
delete from sa.sap_map_temp
where item_id = rec_imp.item_id; --löscht den Eintrag, nachdem es in das Protokoll geschrieben wurde
dbms_output.put_line('Inserted: '||rec_imp.subject|| ' --- ' || rec_imp.item_id);
end loop;
close import_cursor;
end;
/
--spool off;
set serveroutput off;