Reputation: 337
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
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
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