2014-10-23 4 views
13

में परिभाषित किया जाना चाहिए क्या कोई मुझे पैकेज में अपनी pl/sql प्रक्रिया डालने में मदद कर सकता है? मैं कोशिश की है और मैं इसे के साथ संघर्ष कर रहा हूँ:ओरेकल त्रुटि पीएलएस -00323: उपप्रोग्राम या कर्सर को पैकेज विनिर्देश में घोषित किया गया है और पैकेज बॉडी

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; 
:

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

-- 

यह मेरा पैकेज शरीर जहां समस्या हो रही im है:

यह वही है मैं अपने पैकेज विनिर्देश के लिए है, है

अगर कोई मुझे त्रुटियों को ठीक मदद कर सकता है मैं इसे सराहना करेंगे:

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

उत्तर

26

आपका शीर्षक और शरीर प्रक्रिया defi nitions

मेल नहीं खाते हेडर में, तुम हो:

PROCEDURE get_films(fname VARCHAR2); 

जबकि शरीर में:

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

आप शायद सिर्फ दो अतिरिक्त बाहर पैरामीटर वाला हैडर परिभाषा अद्यतन करने की आवश्यकता ?

संक्षेप में प्रस्तुत करने

  • हैडर परिभाषा शरीर कार्यान्वयन के सभी मापदंडों (पैरामीटर की संख्या, मापदंडों के नाम, मापदंडों के आदेश, और पैरामीटर प्रकार)
  • से मेल खाता है एलेक्स की टिप्पणी के अनुसार सुनिश्चित करें , आधार प्रकार (VARCHAR2) के साथ कस्टम प्रकार (film.title%type) मिश्रण और मिलान न करें। एक या दूसरे चुनें।
+0

जब मैंने कोशिश की कि मुझे पीकेजी बॉडी में त्रुटि मिली है: त्रुटि (4,11): पीएलएस -00323: उपप्रोग्राम या कर्सर 'GET_FILMS' पैकेज विनिर्देश में घोषित किया गया है और पैकेज बॉडी – SqlNoob

+1

@SqlNoob में परिभाषित किया जाना चाहिए - '% type' ठीक है, लेकिन आपको बिल्कुल वही घोषणा का उपयोग करना होगा, यदि आप जानते हैं कि वे समान हैं तो भी आप मिश्रण और मिलान नहीं कर सकते; क्या आपने फिल्म में 'fname' fname बनाया था।शीर्षक% प्रकार 'भी है, या इसे' वर्कर 'के रूप में छोड़ दें? पूरी घोषणा समान होना चाहिए। (और आप पैरामीटर के लिए आकार निर्दिष्ट नहीं कर सकते हैं, इसलिए 'varchar2 (50 बाइट)' त्रुटि उत्पन्न करेगा)। –

-2

"Subprogram या कर्सर 'M115_EDIT' एक पैकेज विनिर्देश में घोषित किया जाता है और पैकेज शरीर में परिभाषित किया जाना चाहिए"

मैं यह त्रुटि आई, जबकि मैं अपने परियोजना कारण पर काम कर रहा था यह था के लिए शरीर में परिभाषित प्रक्रिया के अंदर एक पैरामीटर नाम शरीर में संबंधित पैरामीटर नाम से मेल नहीं खाता था।

my specification:

my body

मेरी market_code पैरामीटर विनिर्देश sub_market_code.error के रूप में इस अंतर के कारण हुआ है, जहां यह परिभाषित किया गया है के साथ तुलना में शरीर में अलग है। मैंने sub_market_code पैरामीटर को विनिर्देश में market_code में बदल दिया ताकि यह शरीर के साथ मेल खा सके और इससे उपर्युक्त समस्या हल हो गई।

स्पष्ट रूप से प्रक्रिया के 'आर_डेट' और 'डूर' के आपके शरीर के कार्यान्वयन में वर्णित 2 पैरामीटर विनिर्देश में परिभाषित नहीं हैं। आतंक शरीर और विनिर्देश के बीच इस अंतर के कारण है।

संबंधित मुद्दे