2014-01-11 2 views
0

Не знаю, что я делаю неправильно здесь:Error (20,5): PLS-00306: неверное число или типы аргументов в вызове «F_DREPTURI»

Так что у меня это:

CREATE OR REPLACE PACKAGE pachet_drepturi IS 

    FUNCTION f_identif_furnizor (codcomandahrana_ comanda_hrana.codcomandahrana%TYPE) 
    RETURN furnizor.codfurnizor%TYPE ; 

    FUNCTION f_drepturi (codangajat_ numeric, 
         codfurnizor_ furnizor.codfurnizor%TYPE, 
         tip_drept CHAR) RETURN BOOLEAN ; 

END pachet_drepturi ; 
/
/*drop type tip_drepturi; 
create or replace type TIP_DREPTURI as object (
    CODANGAJAT TIP_ANGAJAT, 
    codfurnizor tip_furnizor, 
    DREPT_INSERARE CHAR(1), 
    DREPT_MODIFICARE CHAR(1), 
    DREPT_STERGERE CHAR(1), 
    member function GETCODANGAJAT return TIP_ANGAJAT , 
    member function GETCODFURNIZOR return TIP_FURNIZOR, 
    member function GETDREPT_INSERARE return CHAR , 
    member function GETDREPT_MODIFICARE return CHAR, 
    member function getDREPT_STERGERE return CHAR 
    )FINAL; 
     /
-------------------------------------------------------------------------------- 
create or replace TYPE BODY TIP_DREPTURI AS 
------------------------------------------- 
    MEMBER FUNCTION getCODANGAJAT RETURN TIP_ANGAJAT IS 
    BEGIN 
     RETURN SELF.CODANGAJAT ; 
    END getCODANGAJAT ; 
    ------------------------------------------- 
    MEMBER FUNCTION getcodfurnizor RETURN tip_furnizor IS 
    begin 
     RETURN SELF.codfurnizor ; 

    END getcodfurnizor ; 

    ----------------------------------------------------------------- 
     MEMBER FUNCTION getDREPT_INSERARE RETURN char IS 
    begin 
     RETURN SELF.DREPT_INSERARE ; 

    end GETDREPT_INSERARE ; 
    ------------------------------------------------------------------ 
    MEMBER FUNCTION getDREPT_MODIFICARE RETURN char IS 
    begin 
     RETURN SELF.DREPT_MODIFICARE ; 

    end GETDREPT_MODIFICARE ; 
    ------------------------------------------------------------------ 
    MEMBER FUNCTION getDREPT_STERGERE RETURN char IS 
    begin 
     RETURN SELF.DREPT_STERGERE ; 

    end GETDREPT_STERGERE ; 
    ------------------------------------------------------------------ 
end ;*/ 
--drop table drepturi; 
/*create table DREPTURI(
CODANGAJAT numeric (10) , 
CODFURNIZOR numeric(10), 
DREPT_INSERARE CHAR(1) default 'N' not null constraint CK_DREPT_INS check (DREPT_INSERARE in ('D','N')), 
DREPT_MODIFICARE CHAR(1) default 'N' not null constraint CK_DREPT_MOD check (DREPT_MODIFICARE in ('D','N')), 
drept_stergere char(1) default 'N' not null constraint ck_drept_del check (drept_stergere in ('D','N')), 
constraint pk_drepturi primary key (codangajat, codfurnizor) 
);*/ 


----------------------------------------------- 
CREATE OR REPLACE PACKAGE BODY pachet_drepturi IS 
-------------------------------------------------------------------------- 
FUNCTION f_identif_furnizor (codcomandahrana_ comanda_hrana.codcomandahrana%TYPE) 
RETURN furnizor.codfurnizor%TYPE 
is 
    V_CODFURNIZOR varchar2(5); 
    ref1 ref tip_furnizor; 
begin 
    select REF_FURNIZOR 
     into REF1 
     from COMANDA_HRANA 
    where CODCOMANDAHRANA=CODCOMANDAHRANA_ ; 
    RETURN v_codfurnizor ; 
END ; 

-------------------------------------------------------------------------- 
FUNCTION f_drepturi (codangajat_ numeric, 
        codfurnizor_ furnizor.codfurnizor%TYPE, 
       tip_drept CHAR) 
    RETURN BOOLEAN 
IS 
    v_sir CHAR(1) ; 
BEGIN 
    CASE 
     WHEN tip_drept = 'I' THEN  
     SELECT drept_inserare INTO v_sir FROM drepturi 
     WHERE codangajat = codangajat_ AND codfurnizor=codfurnizor_ ; 
     WHEN tip_drept = 'U' THEN  
     SELECT drept_modificare INTO v_sir FROM drepturi 
     WHERE codangajat = codangajat_ AND codfurnizor=codfurnizor_ ; 
     WHEN tip_drept = 'D' THEN  
     SELECT drept_stergere INTO v_sir FROM drepturi 
     WHERE codangajat = codangajat_ AND codfurnizor=codfurnizor_ ; 
    END CASE ; 
    RETURN CASE v_sir WHEN 'D' THEN TRUE ELSE FALSE END ; 
EXCEPTION 
    WHEN NO_DATA_FOUND THEN 
    RETURN FALSE ; 
END ; 
END pachet_drepturi ; 
--======================================================================== 
/

И когда я вызываю функцию в триггере ниже, я получаю эту ошибку:

IF **pachet_drepturi.f_drepturi (USER, :NEW.ref_furnizor, 'I') THEN** 
     NULL ; 
    ELSE 
     RAISE_APPLICATION_ERROR (-20572, 'Nu aveti dreptul de a insera comenzi noi pentru acest furnizor !'); 
    END IF ; 
~~~~~~ 

Error(20,5): PLS-00306: wrong number or types of arguments in call to 'F_DREPTURI' 

~~~~~ 

Упомяну, что мой codAngajat в ANGAJATI таблице VARCHAR2 (5).

Можете ли вы объяснить, что я делаю неправильно?

ответ

0

Тип данных, возвращаемый USER, является символом, а в вашей функции codangajat_ является числовым.

Надеюсь, что тип данных ref_furnizor в таблице, для которого вы написали триггер, похож на codfurnizor_ furnizor.codfurnizor% TYPE, если нет, то вам тоже нужно его изменить.

+0

Заменено codangajat_ с помощью: varchar2. Кроме того, попытался заменить angajati.codangajat% TYPE, по-прежнему такая же ошибка! – user3185322

+0

Каковы типы типов мебели.codfurnizor и ref_furnizor? – San

+0

furnizor.codfurnizor - varchar2, ref_furnizor - varchar2 – user3185322

Смежные вопросы