2008-10-10 9 views
7

मैं ओरेकल पीएल/एसक्यूएल में लिखी मेरी कंपनी के लिए एसक्यूएल स्क्रिप्ट्स की एक श्रृंखला को सॉर्ट कर रहा हूं। मैं एक आवश्यक लिपि में आया जो नीचे के पास एक अजीब तरह से रखा गया स्लैश था। यह इस तरह सीवीएस में चेक किया गया है। क्या यह एक शुद्ध वाक्यविन्यास त्रुटि है या क्या इसमें कुछ फ़ंक्शन है जो मुझे पता नहीं है। थोड़ा अस्पष्ट स्क्रिप्ट:क्या यह स्लैश चरित्र ओरेकल पीएल/एसक्यूएल स्क्रिप्ट में एक त्रुटि है?

set serveroutput on size 2000; 
--PL/SQL block to link ISSN in serial base on a company's ISSN text file 

declare 
    cursor ItemCursor is 
     select issn is2 from web.obfuscated1 where issn is not null 
      union 
     select eissn is2 from web.obfuscated1 where eissn is not null; 

    cursor ItemCursor1(aIS varchar2) is 
     select obfuscated1_uid from web.obfuscated1 where group_num is null and issn in (
      select distinct issn from web.obfuscated1 where issn = aIS or eissn = aIS 
       union 
      select distinct eissn from web.obfuscated1 where issn = aIS or eissn = aIS 
     ) 
      union 
     select obfuscated1_uid from web.obfuscated1 where eissn in (
      select distinct issn from web.obfuscated1 where issn = aIS or eissn = aIS 
       union 
      select distinct eissn from web.obfuscated1 where issn = aIS or eissn = aIS 
     ); 

    cursor ItemCursor2(aIS9 varchar2) is 
     select obfuscated1_uid from web.obfuscated1 where issn in (
      select distinct issn from web.obfuscated1 where issn = aIS9 or eissn = aIS9 
       union 
      select distinct eissn from web.obfuscated1 where issn = aIS9 or eissn = aIS9 
     ) and group_num is null; 

    agroup  number(8); 
    processCount number(8); 

    ------------------------------------------------------ 
    -- MAIN BLOCK ----------------------------------- 
    ------------------------------------------------- 
begin 
    processCount := 0; 

    agroup := null; 
    for itemRec in ItemCursor loop 
     agroup := null; 
     begin 
      select group_num into agroup from web.obfuscated1 where issn in (
       select distinct issn from web.obfuscated1 where issn = itemRec.is2 or eissn = itemRec.is2 
        union 
       select distinct eissn from web.obfuscated1 where issn = itemRec.is2 or eissn = itemRec.is2 
      ) and group_num is not null and issn is not null and eissn is not null and rownum <= 1; 

     exception 
      when no_data_found then 
       agroup := null; 
      when others then 
       agroup := null; 
     end; 

     if agroup is not null then 
      for itemRec2 in ItemCursor2(itemRec.is2) loop 
       update web.obfuscated1 set group_num = agroup where obfuscated1_uid = itemRec2.obfuscated1_uid; 
       commit; 
      end loop; 
     else 
      processCount := processCount + 1; 
      for itemRec1 in ItemCursor1(itemRec.is2) loop 
       update web.obfuscated1 set group_num = processCount where obfuscated1_uid = itemRec1.obfuscated1_uid; 
       commit; 
      end loop; 
      commit; 
     end if; 
    end loop; 

    dbms_output.put_line('Total record read: ' || processCount); 
exception 
    when others then 
     dbms_output.put_line('ORA' || sqlcode); 
     dbms_output.put_line(substr(sqlerrm, 1, 255)); 
     dbms_output.put_line('ORA- Error during processing '); 
    end; 
/
exit; 

उत्तर

21

सबसे हाल ही में मार डाला एसक्यूएल आदेश या PL/SQL ब्लॉक जो संग्रहीत है पर क्रियान्वित:

स्लेश a meaning है एसक्यूएल बफर में। आप प्रॉम्प्ट पर या मल्टी-लाइन कमांड के लाइन नंबर प्रॉम्प्ट पर स्लैश (/) दर्ज कर सकते हैं। स्लैश कमांड रन के समान कार्य करता है, लेकिन कमांड सूचीबद्ध नहीं करता है।

5

/अंत में दुभाषिया बताने के लिए है भरी हुई स्क्रिप्ट को निष्पादित करने के लिए

मूल रूप से आप सामान टाइप करें और उसके टाइप "/" और क्या तुम सिर्फ निष्पादित करेंगे टाइप किया

1

यह कोई त्रुटि नहीं है। यह स्क्रिप्ट निष्पादित करता है।

यह उपयोगी होता है जब आप एक फ़ाइल में एक साथ विभिन्न स्क्रिप्ट को जोड़ते हैं और प्रत्येक अलग कार्य को अगले के सामने निष्पादित करना चाहते हैं।

यानी बनाएं समारोह / संग्रहीत प्रक्रिया स्लेश संग्रहीत प्रक्रिया त्रुटियों के साथ बनाया जा सकता है बिना समारोह

का उपयोग करता है या बनाया नहीं हो सकता है कि बनाएँ।

3

स्लैश और "बाहर निकलने" दोनों मुझे संदेह करते हैं कि आपको SQL स्क्रिप्ट से इस स्क्रिप्ट को चलाने के लिए माना जाता है। यदि आप ओरेकल को किसी अन्य तरीके से सबमिट करने का प्रयास करते हैं तो आपको एक त्रुटि मिल सकती है। उस स्थिति में, बस दोनों से छुटकारा पाएं।

6

ओरेकल का उपयोग करते समय आप तीन अलग-अलग व्याकरण "मिश्रण" करते हैं।

  • एसक्यूएल
  • PL/SQL
  • sqlplus (कमांड लाइन ग्राहक)

sqlplus निष्पादित कर सकते हैं/प्रक्रिया एसक्यूएल और उन्हें डीबी सर्वर पर भेज कर PL/SQL विवरणों। जबकि sqlplus कमांड sqlplus द्वारा स्वयं व्याख्या की जाती है।

अर्धविराम ";" एसक्यूएल व्याकरण का हिस्सा नहीं है और एसकप्लस इसे एसक्यूएल कथन के अंत के रूप में पहचानता है। पीएल/एसक्यूएल के लिए यह व्याकरण का हिस्सा है और इसे स्पष्ट रूप से एसक्लप्लस को अवश्य कहना चाहिए कि कथन यहां समाप्त होता है और स्लैश का उपयोग करके निष्पादित किया जाना चाहिए।

अन्य sqlplus आदेश "EXIT", "परिभाषा" "VARIABLE" "प्रिंट" "सेट < कुछ >" (सेट ROLE को छोड़कर) हैं।

दूसरी ओर उदाहरण के लिए टॉड पीएल/एसक्यूएल ब्लॉक के अंत को एक खाली रेखा को देखते हुए पहचानता है।

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