此过程编辑或添加(根据表格)任务表功能。它有3个参数:任务ID,要添加或编辑的功能以及值。我是pl sql的新手,我知道我做错了什么,但我不知道。这是代码
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;
它实际上检查输入的值是否有效,如果是,则检查该特定任务的功能是否已存在。如果存在,则编辑,如果不存在则再添加。
这是我的表
这就是我得到的错误:
Fehlerbericht - ORA-00955:Es gibt bereits ein Objekt mit diesem Namen 00955. 00000 - “名称已被现有对象使用”
*原因:
动作:
答案 0 :(得分:1)
如果在编译过程时收到此错误消息,则数据库模式中已存在另一个名为bearbeiteAufgabe4的数据库对象。
可以是具有该名称的表格,也可以是包裹。
select object_name,object_type
from user_objects
where object_name=upper('bearbeiteAufgabe4');