it-swarm.com.de

Oracle-Fehler PLS-00323: Unterprogramm oder Cursor wird in einer Paketspezifikation deklariert und muss im Paketkörper definiert werden

Kann mir jemand helfen, meine pl/sql-Prozedur in ein Paket zu packen? Ich habe es versucht und habe damit zu kämpfen:

Folgendes habe ich für meine Paketspezifikation:

CREATE OR REPLACE PACKAGE film_pkg
IS
title VARCHAR2(100);
PROCEDURE get_films(fname VARCHAR2);
END film_pkg;

--

Dies ist mein Paketkörper, in dem ich auf die Probleme stoße:

  CREATE OR REPLACE PACKAGE BODY film_pkg
IS
   PROCEDURE get_films (fname    IN     film.title%TYPE,
                        r_date      OUT film.release_date%TYPE,
                        dur         OUT film.duration%TYPE)
   AS
   BEGIN
      SELECT release_date, duration
        INTO r_date, dur
        FROM FILM
       WHERE title = fname;
   EXCEPTION
      WHEN NO_DATA_FOUND
      THEN
         r_date := '';
         dur := '';
   END get_films;
END film_pkg;

wenn mir jemand helfen könnte, die Fehler zu beheben, würde ich es schätzen:

Error(4,11): PLS-00323: subprogram or cursor 'GET_FILMS' is declared in a package specification and must be defined in the package body
16
SqlNoob

Ihre Header- und Body-Prozedurdefinitionen stimmen nicht überein 

In der Kopfzeile haben Sie:

PROCEDURE get_films(fname VARCHAR2);

Während im Körper:

PROCEDURE get_films(fname IN film.title%type, 
   r_date OUT film.release_date%type, dur OUT film.duration%type)

Sie müssen wahrscheinlich nur die Header-Definition mit den zwei zusätzlichen OUT-Parametern aktualisieren?

Zusammenfassen  

  • Stellen Sie sicher, dass die Header-Definition mit allen Parametern der Body-Implementierung übereinstimmt (Anzahl der Parameter, Parameternamen, Reihenfolge der Parameter und Parametertypen).
  • Laut Alex 'Kommentar darf der benutzerdefinierte Typ (film.title%type) nicht mit dem Basistyp (VARCHAR2) kombiniert werden. Wählen Sie das eine oder das andere aus.
31
StuartLC

"Unterprogramm oder Cursor 'M115_EDIT' ist in einer Paketspezifikation deklariert und muss im Pakethauptteil definiert werden."

Ich habe diesen Fehler erhalten, während ich an meinem Projekt arbeitete. Der Grund dafür war, dass ein Parametername, der sich in der im Rumpf definierten Prozedur befand, nicht mit dem entsprechenden Parameternamen im Rumpf übereinstimmt.

meine Spezifikation:

mein Körper

mein market_code-Parameter unterscheidet sich im Rumpf, wenn er mit der Spezifikation verglichen wird, in der er als sub_market_code.error aufgrund dieses Unterschieds definiert ist Ich habe den Parameter sub_market_code in der Spezifikation in market_code geändert, damit er mit dem Body übereinstimmt und dieser gelöst wird das oben erwähnte Problem.

2 Parameter, die in der Rumpfimplementierung der Prozedur 'r_date' und 'dur' erwähnt werden, sind in der Spezifikation nicht definiert. Der Fehler ist auf diesen Unterschied zwischen Rumpf und Spezifikation zurückzuführen.

" Parametername das sich innerhalb der im Hauptteil definierten Prozedur befand, stimmte nicht mit dem entsprechenden Parameternamen im Hauptteil überein."

0
Khang Dq