/***************************************************************************/
/*    Uebung 13                                                            */
/*                                                                         */
/*    PL/SQL-Programmierung                                                */
/*                                                                         */
/*    Version 3  fuer Oracle 11g und SQL Developer 2.1                     */
/*                                                                         */
/***************************************************************************/
drop table Lief_Liste;

create table Lief_Liste (
Ort        VARCHAR(20),
Liste      VARCHAR(250));

set serveroutput on
DECLARE

   cursor lief_lesen is select Name, Ort from Lieferant order by Ort, Name;

BEGIN

   delete from lief_Liste;
   DBMS_OUTPUT.PUT_LINE('Alle Zeilen geloescht');

   FOR zeile IN lief_lesen 
   LOOP
      update Lief_Liste set Liste = Liste || ', ' || zeile.Name 
      where Ort = zeile.Ort;
  
      IF SQL%NOTFOUND
      THEN
        insert into Lief_Liste values (zeile.Ort, zeile.Name);
        DBMS_OUTPUT.PUT_LINE('Insert erforderlich Ort = ' || zeile.ort);
      ELSE
        DBMS_OUTPUT.PUT_LINE('Update erfolgreich Ort = ' || zeile.ort);
      END IF;
  END LOOP;
End;
/
select * from Lief_Liste;
insert into Lieferant values(10,'Meyer','Weimar',10);

set serveroutput on
DECLARE

   cursor lief_lesen is select Name, Ort from Lieferant order by Ort, Name;

BEGIN

   delete from lief_Liste;
   DBMS_OUTPUT.PUT_LINE('Alle Zeilen geloescht');

   FOR zeile IN lief_lesen 
   LOOP
      update Lief_Liste set Liste = Liste || ', ' || zeile.Name 
      where Ort = zeile.Ort;
  
      IF SQL%NOTFOUND
      THEN
        insert into Lief_Liste values (zeile.Ort, zeile.Name);
        DBMS_OUTPUT.PUT_LINE('Insert erforderlich Ort = ' || zeile.ort);
      ELSE
        DBMS_OUTPUT.PUT_LINE('Update erfolgreich Ort = ' || zeile.ort);
      END IF;
  END LOOP;
End;
/

select * from Lief_Liste;
rollback;