oracle - pl sql procedure does not compile

This procedure edits or adds (depending on the table) the Task table feature. It has 3 parameters : the task id, the feature to add or edit and the value. Im new to pl sql and I know I´m doing something wrong but I dont what. This is the code

set serveroutput on
create or replace procedure bearbeiteAufgabe4(Aufg_ID Aufgabe.Aufgaben_ID%TYPE, Eigenschaft VARCHAR2, Wert ANYDATA)
IS
  titel_aufg Aufgabe.Titel%TYPE;
  typ_besch Typ.Typ_Beschreibung%TYPE;
  eigensch ANYDATA;
  type eigenschaften_array IS VARRAY(15) OF VARCHAR2(10); 
  eigenschaften eigenschaften_array;
  excp exception;
  kein_eigenschaft exception;
  nicht_ver_eig exception;
  nicht_ver_typ exception;
  anzahl_werte NUMBER;
begin
  anzahl_werte:= 16;
  eigenschaften:= eigenschaften_array('Titel','Beschreibung','Beginn','Beginn formel',
  'Dauer','Dauer Einheit','Dauer formel','Ende','Ende formel','Erstellzeitpunkt',
  'Aufgabengeber',
  'Aufgabenverantwortlicher','Pruefer','Ansprechpartner','Ort','Status','Typ','Aufgabengrund','Vorgaenger','Version');
  -- check if the task exists
  select titel into titel_aufg
  from Aufgabe
  where Aufg_ID = Aufgabe.Aufgaben_ID;

   if titel_aufg is null then
    raise excp;
  end if;

  -- loop in order to check if the feature actually exists

  for i in 1 ..  anzahl_werte LOOP
    if Eigenschaft = eigenschaften(i) then
      null;
    else -- when the feature does not exist
      raise kein_eigenschaft;
    end if;
  end loop;



  if Eigenschaft = 'Erstellzeitpunkt' or Eigenschaft = 'Titel' or Eigenschaft ='Aufgabenvertantwortlicher'
   or Eigenschaft ='Aufgabengeber' or Eigenschaft ='Grund' or Eigenschaft ='Typ'
   or Eigenschaft = 'Vorgaenger'
   then
    raise nicht_ver_eig;
  end if;

  select Typ_Beschreibung into typ_besch
  from Typ t join Aufgabe a on a.Typ_Typ_ID = t.Typ_ID
  where Aufg_ID = Aufgaben_ID;

  if typ_besch = 'Container' or typ_besch ='Kommentar' or typ_besch ='Bedingung' then
    raise nicht_ver_typ;
  end if;

  -- edit or add features


  select
  case when Eigenschaft = 'Beschreibung' then Beschreibung
   when Eigenschaft = 'Beginn' then Beginn
   when Eigenschaft = 'Beginn formel' then Beginn_formel
   when Eigenschaft = 'Dauer' then Dauer
   when Eigenschaft = 'Dauer Einheit' then Dauer_Einheit
   when Eigenschaft = 'Dauer formel' then Dauer_formel
   when Eigenschaft = 'Ende' then Ende
   when Eigenschaft = 'Ende formel' then Ende_formel
   when Eigenschaft = 'Ort' then Ort
   when Eigenschaft = 'Version' then Version
   when Eigenschaft = 'Ansprechpartner' then "Ansprechpartner_(dessen_ID)"
   when Eigenschaft = 'Status' then Status
  end as Aufgabeneigenschaft into eigensch
  from Aufgabe a
  where a.Aufgaben_ID = Aufg_ID;


  if eigensch is null then
    -- add
    insert into Aufgabe(Aufgaben_ID,Titel,Beschreibung, Erstellzeitpunkt,
    Beginn, Beginn_formel,Dauer, Dauer_Einheit, Dauer_formel,Ende, Ende_formel,
    "Aufgabengeber_(dessen_ID)", Aufgabenverantwortlicher,"Pruefer_(dessen_ID)",
    "Ansprechpartner_(dessen_ID)", Ort, Status,Aufgabengrund,TYP_TYP_ID, Vorgaenger_ID, Version)
    values (Aufg_ID, (select Titel from Aufgabe a where a.Aufgaben_ID = Aufg_ID),
    case when Eigenschaft = 'Beschreibung' then Wert else (select Beschreibung
                                                            from Aufgabe a
                                                            where Aufg_ID = a.Aufgaben_ID )end,
    (select Erstellzeitpunkt from Aufgabe a where Aufg_ID = a.Aufgaben_ID),
    case when Eigenschaft = 'Beginn' then Wert else (select Beginn
                                                            from Aufgabe a
                                                            where Aufg_ID = a.Aufgaben_ID ) end,
    case when Eigenschaft = 'Beginn_formel' then Wert else (select Beginn_formel
                                                            from Aufgabe a
                                                            where Aufg_ID = a.Aufgaben_ID ) end,
    case when Eigenschaft = 'Dauer' then Wert else (select Dauer
                                                            from Aufgabe a
                                                            where Aufg_ID = a.Aufgaben_ID ) end,
    case when Eigenschaft = 'Dauer_Einheit' then Wert else (select Dauer_Einheit
                                                            from Aufgabe a
                                                            where Aufg_ID = a.Aufgaben_ID ) end,
    case when Eigenschaft = 'Dauer_formel' then Wert else (select Dauer_formel
                                                            from Aufgabe a
                                                            where Aufg_ID = a.Aufgaben_ID ) end,
    case when Eigenschaft = 'Ende' then Wert else (select Ende
                                                            from Aufgabe a
                                                            where Aufg_ID = a.Aufgaben_ID ) end,
    case when Eigenschaft = 'Ende_formel' then Wert else (select Ende_formel
                                                            from Aufgabe a
                                                            where Aufg_ID = a.Aufgaben_ID ) end,
     (select "Aufgabengeber_(dessen_ID)" from Aufgabe a where Aufg_ID = a.Aufgaben_ID),
     (select Aufgabenverantwortlicher from Aufgabe a where Aufg_ID = a.Aufgaben_ID),
     (select "Pruefer_(dessen_ID)" from Aufgabe a where Aufg_ID = a.Aufgaben_ID),
    case when Eigenschaft = 'Ansprechpartner_(dessen_ID)' then Wert else (select "Ansprechpartner_(dessen_ID)"
                                                            from Aufgabe a
                                                            where Aufg_ID = a.Aufgaben_ID ) end,
      case when Eigenschaft = 'Ort' then Wert else (select Ort
                                                            from Aufgabe a
                                                            where Aufg_ID = a.Aufgaben_ID ) end,
     case when Eigenschaft = 'Status' then Wert else (select Status
                                                            from Aufgabe a
                                                            where Aufg_ID = a.Aufgaben_ID ) end,
     (select Aufgabengrund from Aufgabe a where Aufg_ID = a.Aufgaben_ID),
     (select Vorgaenger_ID from Aufgabe a where Aufg_ID = a.Aufgaben_ID),
     (select Typ_Typ_ID from Aufgabe a where Aufg_ID = a.Aufgaben_ID),
     case when Eigenschaft = 'Version' then Wert else (select Version
                                                            from Aufgabe a
                                                            where Aufg_ID = a.Aufgaben_ID ) end);
  else
    -- edit
    if Eigenschaft = 'Beschreibung' then
      update Aufgabe 
      set Beschreibung = Wert
      where Aufg_ID = Aufgaben_ID;

    elsif Eigenschaft = 'Beginn' then
      update Aufgabe
      set Beginn = Wert
      where Aufg_ID = Aufgaben_ID;

    elsif Eigenschaft = 'Beginn formel' then
      update Aufgabe
      set Beginn_formel = Wert
      where Aufg_ID = Aufgaben_ID;

    elsif Eigenschaft = 'Dauer' then
      update Aufgabe
      set Dauer = Wert
      where Aufg_ID = Aufgaben_ID;

    elsif Eigenschaft = 'Dauer formel' then
      update Aufgabe
      set Dauer_formel = Wert
      where Aufg_ID = Aufgaben_ID;

    elsif Eigenschaft = 'Dauer Einheit' then
      update Aufgabe
      set Dauer_Einheit = Wert
      where Aufg_ID = Aufgaben_ID;

    elsif Eigenschaft = 'Ende' then
      update Aufgabe
      set Ende = Wert
      where Aufg_ID = Aufgaben_ID;

    elsif Eigenschaft = 'Ende formel' then
      update Aufgabe
      set Ende_formel = Wert
      where Aufg_ID = Aufgaben_ID;

    elsif Eigenschaft = 'Ansprechpartner' then
      update Aufgabe
      set "Ansprechpartner_(dessen_ID)" = Wert
      where Aufg_ID = Aufgaben_ID;

    elsif Eigenschaft = 'Ort' then
      update Aufgabe
      set Ort = Wert
      where Aufg_ID = Aufgaben_ID;

    elsif Eigenschaft = 'Status' then
      update Aufgabe
      set Status = Wert
      where Aufg_ID = Aufgaben_ID;

    elsif Eigenschaft = 'Version' then
      update Aufgabe
      set Version = Wert
      where Aufg_ID = Aufgaben_ID;

    end if;
  end if;

  exception
    when no_data_found then
      dbms_output.put_line('Keine Daten');
    when excp then
      dbms_output.put_line('Keine Aufgabe gefunden');
    when kein_eigenschaft then
      dbms_output.put_line('Das ist keine Eigenschaft');
    when nicht_ver_eig then
      dbms_output.put_line('Diese Eigenschaft kann nicht verändert werden');
    when nicht_ver_typ then
      dbms_output.put_line('Eigenschaften dieses Aufgabentyps können nicht verändert werden');
end;

What it actually does it check if the values entered are valid, if so then check if the feature of that specific task already exists. If it exists then edit, if not then add.

This is my table

enter image description here

This is what I get as error:

Fehlerbericht - ORA-00955: Es gibt bereits ein Objekt mit diesem Namen 00955. 00000 - "name is already used by an existing object"
*Cause:
Action:

Upvotes: 0

Views: 135

Answers (1)

Rene
Rene

Reputation: 10551

If you get this error message on compilation of the procedure then there is already another database object with the name bearbeiteAufgabe4 in your database schema.

Could be a table with that name or maybe a package.

select object_name,object_type 
from user_objects 
where object_name=upper('bearbeiteAufgabe4');

Upvotes: 1

Related Questions