oracle-pl sql过程未编译
此过程根据任务表功能的表进行编辑或添加。它有3个参数:任务id、要添加或编辑的功能以及值。我刚接触pl sql,我知道我做错了什么,但我不知道该怎么做。这是密码oracle-pl sql过程未编译,oracle,stored-procedures,plsql,Oracle,Stored Procedures,Plsql,此过程根据任务表功能的表进行编辑或添加。它有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%TYP
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:这是一个很好的例子
95500000-名称已由现有对象使用
*原因:
行动:
如果在编译过程时收到此错误消息,则在数据库架构中已经存在另一个名为bearbeiteAufgabe4的数据库对象 可以是一个具有该名称的表,也可以是一个包
select object_name,object_type
from user_objects
where object_name=upper('bearbeiteAufgabe4');
我删除了sql server标记,因为我认为sql server与此问题无关。您确定bearbeiteAufgabe4不是数据库中的现有对象吗?desc bearbeiteAufgabe4返回什么?如果由于该名称的其他名称已存在而无法创建该过程,则不需要上面的任何代码来重现该问题。该过程可以只包含null;您将得到相同的错误。顺便说一句,您声明类型eigenschaften_数组是varchar210的varray15;然后你在里面放了20个项目,长度不超过24个字符。它必须至少是varchar224的varray20,或者更好的是,是sometable.somecolumn%类型的表。这还允许您使用构造的成员来代替循环进行验证。另外,当anzahl_werte:=16时,它应该是20,或者更好地设置为eigenschaften.count。当然,您的验证循环总是会失败,因为它需要eigenschaft匹配eigenschaften中的每个元素。