内部错误[phdite:node kind] /同义词的循环链

时间:2014-01-04 11:51:17

标签: oracle sqlplus

我在执行代码时遇到这些错误,有人可以给我一个解决方案吗?

create or replace procedure old_candidate (ID_M1 candidate.ID_M1%type,ID_M2 candidate.ID_M2%type,ID_M3 candidate.ID_M3%type,ID_M4 candidate.ID_M4%type,nombre_masterss candidate.nombre_masters%type,Lname candidate.Lname%type,Fname candidate.Fname%type,Fname_father candidate.Fname_father%type,mother candidate.mother%type,sex candidate.sex%type,DOB candidate.DOB%type,POB candidate.POB%type,Nat candidate.Nat%type,ncivil candidate.ncivil%type,Cir candidate.Cir%type,building candidate.building%type,street candidate.street%type,region candidate.region%type,nhood candidate.nhood%type,tel_m candidate.tel_m%type,tel_f candidate.tel_f%type,email candidate.email%type,Hschool candidate.Hschool%type,description candidate.description%type,diploma1 candidate.diploma1%type,desc_d1 candidate.desc_d1%type,Diploma2 candidate.Diploma2%type,desc_d2 candidate.desc_d2%type,Diploma3 candidate.Diploma3%type,desc_d3 candidate.desc_d3%type,motivation_m1 candidate.motivation_m1%type,motivation_m2 candidate.motivation_m2%type,motivation_m3 candidate.motivation_m3%type,motivation_m4 candidate.motivation_m4%type)
is
    IDs     students.ID%type;
    pre     master.prerequis%type;
    test    number;
begin
    select ID
    into IDs
    from students
    where ID_u=get_current_user_ID;
    if nombre_masterss>0 then
        select prerequis 
        into pre
        from master
        where ID_master=ID_m1;
        if pre>0 then   select count(*)
                        into test
                        from inscriptions
                        where master_ID=pre and succeeded='Y';
                        if test=0 then 
                            raise_application_error(-20018,'vous ne pouvez pas s''inscrire au master1 avant de reussir son prerequis'); 
                        end if;
        end if;
    end if;
    if nombre_masterss>1 then
        select prerequis 
        into pre
        from master
        where ID_master=ID_m2;
        if pre>0 then   select count(*)
                        into test
                        from inscriptions
                        where master_ID=pre and succeeded='Y';
                        if test=0 then 
                            raise_application_error(-20018,'vous ne pouvez pas s''inscrire au master2 avant de reussir son prerequis'); 
                        end if;
        end if;
    end if;
    if nombre_masterss>2 then
        select prerequis 
        into pre
        from master
        where ID_master=ID_m3;
        if pre>0 then   select count(*)
                        into test
                        from inscriptions
                        where master_ID=pre and succeeded='Y';
                        if test=0 then 
                            raise_application_error(-20018,'vous ne pouvez pas s''inscrire au master3 avant de reussir son prerequis'); 
                        end if;
        end if;
    end if;
    if nombre_masterss>3 then
        select prerequis 
        into pre
        from master
        where ID_master=ID_m4;
        if pre>0 then   select count(*)
                        into test
                        from inscriptions
                        where master_ID=pre and succeeded='Y';
                        if test=0 then 
                            raise_application_error(-20018,'vous ne pouvez pas s''inscrire au master4 avant de reussir son prerequis'); 
                        end if;
        end if;
    end if;             

    insert into candidate (ID_c,year,old_new,ID,ID_M1,ID_M2,ID_M3,ID_M4,nombre_masters,etat1,etat2,etat3,etat4,date_candidature,Lname,Fname,Fname_father,mother,sex,DOB,POB,Nat,ncivil,cir,building,street,region,nhood,tel_m,tel_f,email,Hschool,description,diploma1,desc_d1,diploma2,desc_d2,diploma3,desc_d3,motivation_m1,motivation_m2,motivation_m3,motivation_m4)
    values(ID_C_seq.nextval,get_annee_scolaire,IDs,'O',ID_M1,ID_M2,ID_M3,ID_M4,nombre_masterss,'P','P','P','P',sysdate,Lname,Fname,Fname_father,mother,sex,DOB,POB,Nat,ncivil,cir,building,street,region,nhood,tel_m,tel_f,email,Hschool,description,diploma1,desc_d1,diploma2,desc_d2,diploma3,desc_d3,motivation_m1,motivation_m2,motivation_m3,motivation_m4);
exception 
    when no_data_found then
        raise_application_error(-20017,'Vous n''etes pas un etudiant');
end;
    /

这是我收到的错误消息:

Errors for PROCEDURE OLD_CANDIDATE:

LINE/COL ERROR
-------- ---------------------------------------------
0/0      PLS-00801: internal error [phdite:node kind]
68/3     PL/SQL: SQL Statement ignored
69/110   PL/SQL: ORA-01775: looping chain of synonyms
72/4     PL/SQL: Statement ignored

我之前创建了一些同义词,然后删除了我的表和程序并重新创建了它们,我认为这是问题的原因如果我没有弄错,有人可以告诉我如何解决这个问题,或者可能删除所有同义词?我尝试了dba_synonyms,但我得知表或视图不存在。

0 个答案:

没有答案