2014-10-23 14 views
13

Birisi pl/sql yordamımı pakete koymama yardımcı olabilir mi? Denedim ve onunla mücadele ediyorum:Oracle Error PLS-00323: alt program veya imleç bir paket belirtiminde bildirilmiş ve paket gövdesinde tanımlanmalıdır

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; 
: Bu im sorunlarla çalışan paketim vücut

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

-- 

geçerli: Bu benim paket şartname için, ne var

herkes bana hataları düzeltmek yardımcı olabilir

i çok memnun olurum:

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

cevap

26

Kişisel başlık ve gövde prosedürü Defi tanımlamalar başlığında

eşleşmiyor şunlara sahip:

PROCEDURE get_films(fname VARCHAR2); 

Oysa vücutta:

PROCEDURE get_films(fname IN film.title%type, 
    r_date OUT film.release_date%type, dur OUT film.duration%type) 
Muhtemelen sadece iki OUT ek parametreleri içeren başlık tanımını güncellemek gerekir

?

  • başlık tanım Alex'in comment uyarınca tüm vücut uygulamasının parametreleri (parametre sayısını, parametrelerin adlarını, parametrelerin sırasını ve parametre türleri)
  • maçları olun özetler için Özel tip (film.title%type) taban tipiyle karıştırmayın ve eşleştirmeyin (VARCHAR2). Birini veya diğerini seçin.
+0

Bunu denediğimde pkg gövdesindeki hatayı aldım: Hata (4,11): PLS-00323: alt program veya imleç 'GET_FILMS' bir paket belirtiminde bildirilmiş ve paket gövdesinde tanımlanmalıdır – SqlNoob

+1

@SqlNoob - '% type' iyidir, ancak tam olarak aynı bildirimi kullanmak zorundasınız, aynı olduklarını bilseler bile karıştırıp eşleştiremezsiniz; filmin fname IN türünü yaptınız.% 'title title' veya 'varchar' olarak mı bırakılsın? Bütün deklarasyonun aynı olması gerekiyor. (Ve bir parametrenin boyutunu belirtemezsiniz, bu yüzden varchar2 (50 bayt) 'bir hataya neden olur). –

-2

"alt program veya imleç 'M115_EDIT' bir paket şartnamede bildirilmiş ve paket vücutta tanımlanması gerekir" şuydu için benim project.The nedene çalışırken bu hata var

Vücutta tanımlanan prosedürün içinde bulunan bir parametre adı, vücuttaki karşılık gelen parametre adıyla eşleşmedi.

my specification:

my body

benim market_code parametre sub_market_code.error bu farka bağlı olarak meydana gelen gibi tanımlandığı tarifname ile karşılaştırıldığında vücut farklıdır

. i belirtimdeki sub_market_code parametresini market_code'a değiştirdim, böylece gövde ile eşleşti ve bu yukarıda bahsedilen problemi çözdü. Vücudunuzda zikredilen 2 parametrenin açıkça belirtildiği gibi 'r_date' ve 'dur' prosedürlerinin uygulanışı, spesifikasyonda tanımlanmamıştır.Olgu, vücut ile spesifikasyon arasındaki bu farktan kaynaklanmaktadır.