包中的重载程序

时间:2012-11-04 08:28:15

标签: sql oracle plsql overloading plsqldeveloper

以下是包TASK5的HEADER

CREATE OR REPLACE PACKAGE TASK5 
    AS 
PROCEDURE  TASK5APROCEDURE ( 
REG_NO  IN  NUMBER,
CERT_TITLE   OUT  VARCHAR2,
E_DATE     OUT DATE,
    C_MARKS OUT INTEGER);


PROCEDURE  TASK5BPROCEDURE ( 
CERT_ID  IN  CHAR, 
C_T OUT CHAR) ;    

 END TASK5;

PACKAGE TASK5的身体

CREATE OR REPLACE PACKAGE BODY TASK5 
AS 


 PROCEDURE    TASK5APROCEDURE ( 
    REG_NO  IN  NUMBER,
    CERT_TITLE   OUT  VARCHAR2,
    E_DATE     OUT DATE,
    C_MARKS OUT INTEGER)
            IS
            BEGIN

SELECT 
    O.PCP_TITLE, 
    C.CERT_EXAMDATE, 
    C.CERT_MARKS 

INTO  
    CERT_TITLE, 
    E_DATE, 
    C_MARKS

FROM 
    PROFCERTPROGRAM O
INNER JOIN 
CERTIFICATION C
    ON O.PCP_ID = C.PCP_ID
WHERE 
    C.S_REGNO LIKE REG_NO;
EXCEPTION
               WHEN NO_DATA_FOUND
THEN 
                  DBMS_OUTPUT.PUT_LINE('NO DATA FOUND');


END TASK5APROCEDURE;


PROCEDURE    TASK5BPROCEDURE ( 
CERT_ID  IN  CHAR, C_T OUT CHAR)
            IS
    BEGIN

DBMS_OUTPUT.PUT_LINE ('COURSE NAMES: ');

FOR R IN (  
    SELECT O.C_TITLE C_T
FROM 
    COURSE O
INNER JOIN 
CERTIFICATIONREQUIREMENT C
    ON O.C_ID = C.C_ID
WHERE 
    C.PCP_ID LIKE '%'||CERT_ID||'%')

LOOP
        DBMS_OUTPUT.PUT_LINE (R.C_T);
END LOOP ;

END TASK5BPROCEDURE;

END TASK5;

我为两个不同的输入编写了两个不同的程序包。 但是,我想用重载程序重写标题和正文,有什么建议吗?

1 个答案:

答案 0 :(得分:2)

重载意味着在包中创建多个相同名称的过程或函数,这些过程或函数使用不同数量的参数和/或参数具有不同的数据类型。这使您可以调用过程并根据给定的参数发生不同的事情。

因此,您的问题的答案很简单。在包规范和包体中将TASK5BPROCEDURE重命名为TASK5APROCEDURE。或者,将它们重命名为不同的东西。作为一个例子,您的规范之后可能会如下所示:

create or replace package task5  as 

   procedure task5procedure ( 
        , reg_no in number
        , cert_title out varchar2
        , e_date out date
        , c_marks out integer);

   procedure task5procedure ( 
        , cert_id in char 
        , c_t out char);    

end task5;

在一个有用的注意事项中,在捕获的异常中使用dbms_output.put_line并不是最好的做法。如果你要捕捉异常,你应该对它做点什么。

正如APC在评论中指出的那样,当你做高度相关的事情时,重载程序是正常的。例如,如果您使用过程发送电子邮件,并且您将电子邮件地址作为字符串或数组传递。你似乎没有在你的程序中做同样的事情,可能想重新考虑这样做的必要性。