2012-02-10 11 views
19

मैं Oracle SQL डेवलपर का उपयोग कर एक दैवज्ञ पैकेज लिख रहा हूँ, मैं इस संकलन त्रुटि मिली:बनाने ओरेकल पैकेज का सामना करना पड़ा PLS-00,103: आई प्रतीक "बनाएँ"

Error(7,1): PLS-00103: Encountered the symbol "CREATE" .

create or replace 
PACKAGE TestPackage AS 
FUNCTION beforePopulate RETURN BOOLEAN; 
FUNCTION afterPopulate RETURN BOOLEAN; 
END TestPackage; 

CREATE OR REPLACE PACKAGE BODY TestPackage AS 
    FUNCTION beforePopulate RETURN BOOLEAN AS 
    BEGIN 
     DELETE FROM TEST_1; 
     INSERT INTO TEST_1 
     SELECT * FROM TEST WHERE VALUE=300; 
     COMMIT; 
     RETURN TRUE; 
    EXCEPTION 
     WHEN OTHERS THEN 
     RETURN FALSE; 
    END; 
    FUNCTION afterPopulate RETURN BOOLEAN AS 
    BEGIN 
     UPDATE TEST SET RESULT="completed" WHERE VALUE=300; 
      COMMIT; 
     RETURN TRUE; 
     EXCEPTION 
      WHEN OTHERS RETURN FALSE; 
     END; 
    END; 
END TestPackage; 

अगर मैं एक / पर जोड़ने लाइन 6, त्रुटि बने:

Error(6,1): PLS-00103: Encountered the symbol "/"

मैं थक गया इस तरह एक खाली कार्यान्वयन:

create or replace 
package package1 as 
END PACKAGE1; 

CREATE OR REPLACE 
package body package1 as 
end package1; 

मुझे एक ही त्रुटि मिली।

+1

एक आईडीई का उपयोग करें, यहां कई चीजें गलत हैं जो टॉड या इसी तरह के संपादकों में कूदनी चाहिए, जैसे: BEGIN afterPopulate FUNCTION के बाद होना चाहिए, परीक्षण से * का चयन करें tEST से v_blah में tah चुनें ...अन्य मुद्दों के साथ-साथ – tbone

+0

और बाद में संदर्भ के लिए इसे बुकमार्क करें: http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/toc.htm – tbone

+0

धन्यवाद, tbone। मैंने इस तरह के खाली कार्यान्वयन की भी कोशिश की: पैकेज पैकेज 1 को END पैकेज 1 के रूप में बनाएं या बदलें; पैकेज बॉडी पैकेज 1 को अंत पैकेज 1 के रूप में बनाएं या बदलें; मुझे एक ही गलती मिली। – Gary

उत्तर

6

यह मेरे लिए काम किया Oracle SQL डेवलपर का उपयोग कर:

create or replace PACKAGE TestPackage AS 
FUNCTION beforePopulate 
RETURN BOOLEAN; 
FUNCTION afterPopulate 
RETURN BOOLEAN; 
END TestPackage; 
/
CREATE OR REPLACE PACKAGE BODY TestPackage AS  
FUNCTION beforePopulate 
    RETURN BOOLEAN AS  
BEGIN  
    DELETE FROM TESTE;  
    INSERT INTO TESTE  
    SELECT 1,1,1 FROM DUAL; 
    COMMIT;  
    RETURN TRUE; 
EXCEPTION  
    WHEN OTHERS THEN 
    RETURN FALSE; 
END; 
FUNCTION afterPopulate 
    RETURN BOOLEAN AS 
BEGIN 
    UPDATE TESTE SET TESTE='OK' WHERE TESTE=''; 
    COMMIT;  
    RETURN TRUE; 
EXCEPTION  
    WHEN OTHERS THEN RETURN FALSE;  
END; 
END TestPackage; 
/ 

मैं जब तक मैं वास्तव में तालिकाओं और स्तंभों उसका प्रयोग करेंगे बनाया इसे चलाने के लिए नहीं मिल सका।

+0

मैंने आपके कोड को अपने वर्गधारक में कॉपी किया, मुझे मिला: त्रुटि (7,1): पीएलएस -00103: एनकॉन्डर प्रतीक "/" । मैं ऑरैक डेवलपर संस्करण 3.0.04 का उपयोग कर रहा हूँ। – Gary

+0

तालिका बनाने का प्रयास करें, यह 'तालिका बनाएं "टेस्ट का उपयोग करता है" ("teste2" VARCHAR2 (5 BYTE), \t "teste3" VARCHAR2 (5 BYTE), \t "टेस्ट" VARCHAR2 (5 BYTE)); ' –

+3

इसके अलावा, बनाना इसे स्क्रिप्ट के रूप में चलाने के लिए सुनिश्चित करें, मुझे लगता है कि यह F5 होना चाहिए। –

22

जब आपके पास BEGIN, END, आदि हैं तो आप पीएल/एसक्यूएल में हैं, एसक्यूएल नहीं।

लाइन की शुरुआत में एक पीएल/एसक्यूएल ब्लॉक को एकल ("आगे") स्लैश के साथ समाप्त करने की आवश्यकता है। यह ओरेकल को बताता है कि आप अपने पीएल/एसक्यूएल ब्लॉक के साथ किए जाते हैं, इसलिए यह टेक्स्ट के उस ब्लॉक को संकलित करता है।

SQL क्वेरी - अर्धविराम द्वारा समाप्त:

update orders set status = 'COMPLETE' where order_id = 55255; 

PL/SQL ब्लॉक - आदेशों अर्धविराम द्वारा अलग, ब्लॉक आगे स्लैश द्वारा समाप्त होता है:

create or replace procedure mark_order_complete (completed_order_id in number) 
is 
begin 
    update orders set status = 'COMPLETE' where order_id = :completed_order_id; 
end mark_order_complete; 
/
+0

धन्यवाद एंड्रयू, आपकी टिप ने मुझे यह पता लगाने में मदद की कि मेरा पैकेज क्यों संकलित नहीं कर रहा था। – MissPiplup

+0

मेरी समस्या हल, धन्यवाद: डी – span

+1

कृपया इस सवाल को बंद करें। कृपया सही उत्तर @MissPiplup – Dropout

1

निष्पादित पैकेज और पैकेज शरीर अलग से F5

2

निराशा के कुछ घंटों के बाद मैं इस सामान को काम करने में कामयाब रहा। मेरे पास सटीक समस्या थी जैसा आपने किया था।

मेरे लिए समाधान एक स्क्रिप्ट के रूप में चलाने के लिए था - पैकेज कोड में नहीं। फॉरवर्ड स्लैश एसक्यूएल वर्कशीट में सही तरीके से काम करते हैं। मैं अंतर जोड़ रहा हूं, मुझे उम्मीद है कि यह आपकी मदद करेगा!

enter image description here

+0

जो पैकेज मैं बना रहा था वह स्पष्ट रूप से आरडीआई_एपीआई है। मेरे पास वही संरचना है जो आप करते हैं। इससे आपकी समस्या का समाधान हो जाना चाहिए। – Dropout

1

मैं एक ही समस्या थी। मैं बाईं ओर मुख्य मेनू od का उपयोग कर पैकेज बनाते हैं और उसी .sql फ़ाइल के अंदर पैकेज घोषणा और शरीर डालता हूं। समस्या हल हो जाती है जब मैं सभी कोड कॉपी करता हूं और इसे नए वर्कशीट में पेस्ट करता हूं और अंत पैकेज_नाम (पैकेज घोषणा और शरीर दोनों के बाद) के बाद "/" डालता है और फिर वर्कशीट को स्क्रिप्ट के रूप में निष्पादित करता है।

0

मुझे यह समस्या थी (त्रुटि (6,1): पीएलएस -00103: प्रतीक "/") जब मैंने सभी डीबी पैकेज कोड (दोनों प्रक्रियाओं के शीर्षलेख और कार्यान्वयन) को sqldeveloper में उपयोगकर्ता/संकुल/MY_PACKAGE_NAME में कॉपी किया उपयोगकर्ता/पैकेज/MY_PACKAGE_NAME/MY_PACKAGE_BODY में उपयोगकर्ता/पैकेज/MY_PACKAGE_NAME और कार्यान्वयन (अंत में शीर्ष पर और बिना '/' अंत में) शीर्षलेखों (बिना अंत में '/' के अंत में) की प्रतिलिपि बनाने के बजाय/MY_PACKAGE_BODY।

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

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