Plsql pls-00306程序调用中参数的数量或类型错误

Plsql pls-00306程序调用中参数的数量或类型错误,plsql,Plsql,我是PL SQL新手,如何解决调用过程中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_work

我是PL SQL新手,如何解决调用过程中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;
 /
创建或替换过程超时(
正常工作小时数,
工作小时数,
消息VARCHAR2,
加班(输入输出号码)
作为
开始
DBMS|u OUTPUT.PUT|u行('输入工作小时数'| |和工作小时数');

如果工作时间错误。。。使用正确数量和类型的参数调用过程?例如

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;
/

请注意,因为第四个参数的传递模式是“输入输出”
,所以您需要将其绑定到变量中-常数不行。

创建过程或函数时,调用过程或函数时声明的参数应一致

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;

调用
超时
或编译
超时
时是否会出现此错误?因为
&hours\u worked
可能是源代码,因为
&
可能在编译时接受用户输入,并合并到过程中,从而导致奇怪。编译不会给出错误,调用过程时会出错。谢谢您的帮助……不过我还是设法用另一种方法完成了。