oracle - pl sql程序无法编译

时间:2017-04-10 10:14:42

标签: 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%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;

它实际上检查输入的值是否有效,如果是,则检查该特定任务的功能是否已存在。如果存在,则编辑,如果不存在则再添加。

这是我的表

enter image description here

这就是我得到的错误:

  

Fehlerbericht - ORA-00955:Es gibt bereits ein Objekt mit diesem Namen   00955. 00000 - “名称已被现有对象使用”
  *原因:
  动作:

1 个答案:

答案 0 :(得分:1)

如果在编译过程时收到此错误消息,则数据库模式中已存在另一个名为bearbeiteAufgabe4的数据库对象。

可以是具有该名称的表格,也可以是包裹。

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