Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

ओरेकल पीएल/एसक्यूएल - संग्रहीत प्रक्रिया प्रदर्शन के लिए NO_DATA_FOUND अपवाद खराब हैं?

मैं ऐसा करने के लिए एक स्पष्ट कर्सर का उपयोग नहीं करूंगा। स्टीव एफ. अब लोगों को स्पष्ट कर्सर का उपयोग करने की सलाह नहीं देते हैं जब एक निहित कर्सर का उपयोग किया जा सकता है।

count(*) . के साथ विधि असुरक्षित है। यदि कोई अन्य सत्र count(*) . के साथ पंक्ति के बाद की शर्त को पूरा करने वाली पंक्ति को हटा देता है , और लाइन से पहले select ... into , कोड एक अपवाद फेंक देगा जिसे संभाला नहीं जाएगा।

मूल पोस्ट के दूसरे संस्करण में यह समस्या नहीं है, और इसे आम तौर पर पसंद किया जाता है।

उस ने कहा, अपवाद का उपयोग करते हुए एक मामूली ओवरहेड है, और यदि आप 100% सुनिश्चित हैं कि डेटा नहीं बदलेगा, तो आप count(*) का उपयोग कर सकते हैं , लेकिन मैं इसके खिलाफ अनुशंसा करता हूं।

मैंने इन बेंचमार्क को Oracle 10.2.0.1 . पर चलाया 32 बिट विंडोज़ . पर . मैं केवल बीता हुआ समय देख रहा हूं। अन्य परीक्षण हार्नेस हैं जो अधिक विवरण दे सकते हैं (जैसे कि लैच काउंट और उपयोग की गई मेमोरी)।

SQL>create table t (NEEDED_FIELD number, COND number);
SQL>insert into t (NEEDED_FIELD, cond) values (1, 0);
declare
  otherVar  number;
  cnt number;
begin
  for i in 1 .. 50000 loop
     select count(*) into cnt from t where cond = 1;

     if (cnt = 1) then
       select NEEDED_FIELD INTO otherVar from t where cond = 1;
     else
       otherVar := 0;
     end if;
   end loop;
end;
/
declare
  otherVar  number;
begin
  for i in 1 .. 50000 loop
     begin
       select NEEDED_FIELD INTO otherVar from t where cond = 1;
     exception
       when no_data_found then
         otherVar := 0;
     end;
   end loop;
end;
/


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle स्ट्रिंग प्रतिस्थापन

  2. ODP.NET कनेक्शन अनुरोध का समय समाप्त हो गया

  3. SQL में डेटाबेस तालिका बनाना, अजीब त्रुटि

  4. Oracle डेटाबेस में एकाधिक मान लौटाने वाले कर्सर के साथ कर्सर आधारित रिकॉर्ड डेटाटाइप

  5. एक परिणाम प्राप्त करते समय Oracle JDBC स्मृति आवंटन