我的ORACLE一个包内有两个重载的过程分别是:
    procedure peoplegrade(use_sname char, use_cno char, use_grade smallint);
    procedure peoplegrade(use_sno number, use_cno char, use_grade smallint);
想实现重载,因为输入的数量都是一样的,第一个输入分别是char和number型,我认为系统能够识别,但是测试代码declare 
  -- Local variables here
  i number;
begin
  -- Test statements here
  
  student_yk.peoplegrade('0001','009','97');
end;
系统提示有太多的方法符合,就是说系统是没有正确重载,请问我是需要改包内的过程还是修改测试代码,怎么改,谢谢

解决方案 »

  1.   

    理论上讲 这样行得通呀方法中参数一样多 但是类型不一致  可以做到呀 在高级语言中(C# java)都是这样实现重载的
    明天去试试   晚上回答之
      

  2.   

    我也觉得JAVA之类的都行得通,但是ORACLE就是无法识别啊...我估计是不是CHAR类型和NUMBER类型要自己标示一下什么的
      

  3.   

    改测试代码似乎没什么用处 
    修改procedure吧 你这个重载的过程系统也不识别 留着也没什么用了 建议将其中一个过程改下名字吧
      

  4.   

    oracle 中 能 隐式转换 也就是说   在匹配的时候 如果类型不一致  它们自动转换   有可能是这个原因 
      

  5.   

    这样呢?begin
    student_yk.peoplegrade(use_sno=>'0001','009','97');
    end;
      

  6.   

    oracle 11g是可以正确重载的
      

  7.   

    人工置顶,应该可以 DECLARE
      -- Two overloaded local procedures
      PROCEDURE LocalProc(p_Parameter1 IN NUMBER) IS
      BEGIN
        DBMS_OUTPUT.PUT_LINE('In version 1, p_Parameter1 = ' ||
                             p_Parameter1);
      END LocalProc;  PROCEDURE LocalProc(p_Parameter1 IN VARCHAR2) IS
      BEGIN
        DBMS_OUTPUT.PUT_LINE('In version 2, p_Parameter1 = ' ||
                             p_Parameter1);
      END LocalProc;
    BEGIN
      -- Call version 1
      LocalProc(12345);  -- And version 2
      LocalProc('abcdef');
    END;
      

  8.   

    那就不应该了  要不重新编译下你的package吧
      

  9.   

    Connected to Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 
    Connected as scott
     
    SQL> 
    SQL> create or replace package pak is
      2    procedure p(a number);
      3    procedure p(a char);
      4  end pak;
      5  /
     
    Package created
     
    SQL> 
    SQL> create or replace package body pak is
      2  procedure p(a number) is
      3  begin
      4  dbms_output.put_line(a);
      5  end;
      6  procedure p(a char) is
      7  begin
      8  dbms_output.put_line('aaaaa' ||a);
      9  end;
     10  end pak;
     11  /
     
    Package body created
     
    SQL> set serveroutput onSQL> exec pak.p(1);
     
    1
     
    PL/SQL procedure successfully completed
     
    SQL> exec pak.p('1');
     
    aaaaa1
     
    PL/SQL procedure successfully completed
      

  10.   

    知道怎么回事了,我那里面三个输入,最后一个我测试的时候用了'',输入的是字符串,而本来该录入的是number,所以估计开启了隐式转换,最后一个的''我去掉了估计没有开启隐式转换估计就可以了,谢谢了
      

  11.   

    调用时显示指定参数匹配就可以了
    declare  
      -- Local variables here
      i number;
    begin
      --调用第一个过程
      student_yk.peoplegrade(use_sname=>'0001',use_cno=>'009',use_grade=>'97');
      --调用第二个过程
      student_yk.peoplegrade(use_sno=>'0001',use_cno=>'009',use_grade=>'97');
    end;