2015-09-29 2 views
0

Является новым для PL SQL, как мне разрешить неправильное число или типы аргументов pls-00306 при вызове процедуры?pls-00306 неправильное количество или типы аргументов при вызове процедуры

CREATE OR REPLACE PROCEDURE overtime (
Normal_Hours NUMBER , 
Hours_worked NUMBER , 
message VARCHAR2 , 
Overtime IN OUT NUMBER) 

AS 

Begin 
    DBMS_OUTPUT.PUT_LINE('ENTER HOURS WORKED' || &hours_worked); 
    IF hours_worked <=Normal_Hours THEN 
     DBMS_OUTPUT.PUT_LINE('NO OVETIME WORKED'); 
ELSE 
    BEGIN 
     Overtime := Hours_worked - Normal_Hours; 
     DBMS_OUTPUT.PUT_LINE('You have worked' || Overtime); 
     END; 
     END IF; 
END; 
/
+0

возможно дубликат [Неправильный номер или типы ошибок аргументов при вызове процедуры] (http://stackoverflow.com/questions/22449128/wrong-number-or-types-of-arguments-error-while- call-procedure) – user272735

+0

Получаете ли вы эту ошибку при вызове 'overtime' или при компиляции' overtime'? Потому что '& hours_worked' может быть источником, так как' & 'может принимать пользовательский ввод во время компиляции и включаться в процедуру, вызывающую странность. –

+0

Компиляция не дает ошибки, возникает ошибка при вызове процедуры. – RaeRay

ответ

0

При создании процедуры или функции объявленные параметры должны быть согласованы при вызове процедуры или функции.

CREATE OR REPLACE PROCEDURE overtime (
Normal_Hours NUMBER , 
Hours_worked NUMBER , 
message VARCHAR2 , 
Overtime IN OUT NUMBER) 

Поскольку вы объявили 4 параметра в процедуре, то правило, что при вызове вашей процедуры, вы должны также иметь 4 переменных/значение миновать.

declare 
out_overtime number; -- this is the variable that will catch the value passed by the procedure 

begin 
overtime(8,9,'One Hour overtime', out_overtime); 
dbms_output.put_line('Total overtime is '||out_overtime||' hours'); 
end; 
+0

Спасибо за помощь ... Мне удалось сделать это по-другому. – RaeRay

0

Err ... Вызвать процедуру с правильным количеством и типами аргументов? Например.

declare 
    v_overtime number; 
begin 
    overtime(
    normal_hours => 8 
    ,hours_worked => 12 
    ,message  => 'clever message' 
    ,overtime  => v_overtime 
); 
    dbms_output.put_line(v_overtime); 
end; 
/

Обратите внимание, что из-за прохождения в режиме 4-го аргумента является in out вам нужно связать, что в переменной - константа, не будет делать.

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