überlastung Prozedur im Paket
Unten ist der HEADER für das Paket TASK5
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;
Den KÖRPER für das PAKET 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;
Schrieb ich das Paket mit zwei verschiedenen Verfahren für 2 verschiedene input.
Aber, ich will, zu schreiben, die Kopf und Körper mit überlastung Verfahren, irgendwelche Vorschläge?
FYI - LIKE ohne Wildcards, wie in "C. S_REGNO WIE REG_NO', ist dasselbe wie Gleichheit. Sollten Sie mit dem richtigen Betreiber.
InformationsquelleAutor Pravin Agre | 2012-11-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überlastung bedeutet, dass mehrere Prozeduren oder Funktionen mit dem gleichen Namen in einem Paket, die eine unterschiedliche Anzahl von Argumenten und /oder wo die Argumente unterschiedlicher Datentypen. Dies ermöglicht Ihnen, eine Prozedur aufrufen und haben unterschiedliche Dinge geschehen, abhängig von der gegebenen Argumente.
Die Antwort auf Ihre Frage lautet daher, ist so einfach. Benennen Sie
TASK5BPROCEDURE
zuTASK5APROCEDURE
sowohl in der package-Spezifikation und package body. Alternativ benennen Sie Sie beide auf etwas anderes. Als ein Beispiel Ihrer Spezifikation könnte wie folgt Aussehen danach:Auf eine kleine Randnotiz mit
dbms_output.put_line
in einer abgefangenen Ausnahme ist nicht wirklich die beste Praxis. Wenn du gehst, um eine exception auffangen sollten Sie etwas tun.APC-Hinweise in den Kommentar, es wäre normal, zu überladen einer Prozedur, wenn Sie tun, sehr Verwandte Dinge. Zum Beispiel, wenn Sie senden eine e-mail mit einem Verfahren, und Sie sind vorbei die e-mail-Adressen entweder als string oder als array. Sie scheinen nicht zu tun, die gleiche Sache in den Verfahren hier und wollen vielleicht überdenken Sie die Notwendigkeit, dies zu tun.
na klar gibt es etwas falsch mit, wie Sie Aufruf das Verfahren. Aber da wir nicht die telepathische es gibt keinen Weg, wir werden in der Lage sein, um Ihnen zu helfen, es sei denn, Sie hinter dem code.
okk ich werde es sehr bald, wenn ich konnte nicht herausfinden, vielen Dank.
Gute Praxis ist, dass die überladene Prozeduren im wesentlichen die gleiche Sache, aber mit unterschiedlichen Parametern. Die beiden Verfahren in der gebuchten Probe verschiedene Dinge tun (abrufen eine Zeile abzurufen, die mehrere Zeilen) und so sollten unterschiedliche Namen haben.
InformationsquelleAutor Ben