Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
oracle-pl sql过程未编译_Oracle_Stored Procedures_Plsql - Fatal编程技术网

oracle-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

此过程根据任务表功能的表进行编辑或添加。它有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:这是一个很好的例子 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中的每个元素。