Cursor Attributes: %FOUND, %NOTFOUND, %ISOPEN, %ROWCOUNT

Cursor attributes એ built-in database ના dashboard નાં માપ તરીકે કામ કરે છે જે તમારા programs ને એક query ના execution ની બિલકુલ જીવંત સ્થિતિ જણાવે છે.

10 min read · 10 cards · 2 checks

Read in: English · हिन्दी · ગુજરાતી


Theory

તમારી Query ના ધબકારા તપાસવા

કલ્પો કે તમે TicketDesk માંથી તાકીદનું ધ્યાન માંગતી rows લાવવા એક loop ચલાવો છો. તમારો PL/SQL program ખરેખર કેવી રીતે જાણે કે છેલ્લું ticket ખેંચાઈ ગયું? જો તમે એવા cursor માંથી fetch કરવાનો પ્રયાસ કરો જેને ખોલવાનું તમે ભૂલી ગયા તો શું થાય, કે અત્યાર સુધી process થયેલા records ની કુલ સંખ્યા તમે કેવી રીતે દેખાડો? તમે તમારી ખુલ્લી આંખે database ની memory ની અંદર જોઈ શકતા નથી. તમને built-in સૂચકોનો એક સમૂહ જોઈએ જે કોઈ પણ મિલિસેકન્ડે તમારા cursor ની સ્થિતિ તરત ઉજાગર કરે.

Theory

કારના Dashboard નાં સૂચકો

એક cursor ને એક delivery van ચલાવવા જેવો વિચારો. ચાલતાં ચાલતાં તમે engine કે petrol ની ટાંકીની અંદર સીધું જોઈ શકતા નથી. એને બદલે, તમે તમારું dashboard જુઓ છો. Petrol નું માપ તમને કહે છે કે petrol બાકી છે કે નહીં (%FOUND કે %NOTFOUND). Odometer તમને બિલકુલ કહે છે કે તમે કેટલા કિલોમીટર મુસાફરી કરી (%ROWCOUNT). Ignition ની લાઈટ તમને કહે છે કે engine ચાલુ છે કે સંપૂર્ણપણે બંધ (%ISOPEN). આ dashboard નાં માપ તમને વાહન ખોલ્યા વગર જીવંત પ્રતિભાવ આપે છે.

Theory

Oracle PL/SQL માં Cursor Attributes

Oracle database ના dialect માં, cursor attributes એ system દ્વારા વ્યાખ્યાયિત ગુણધર્મો છે જે એક cursor માટે status ના નિશાનો તરીકે કામ કરે છે. જ્યારે પણ તમે એક SQL statement ચલાવો કે એક cursor ની કામગીરી કરો, Oracle આપોઆપ ખાનગી memory ના વિસ્તારમાં આ attributes update કરે છે. ટકાવારીના ચિહ્ન (%) વાપરીને તમારા cursor ના variable સાથે એક attribute નું નામ જોડીને, તમારો procedural code ગતિશીલ execution ની પસંદગીઓ કરવા હરોળની ગણતરી અને fetch ની સફળતા જેવા runtime ના ગુણધર્મો તપાસી શકે છે.

At a glance

Oracle PL/SQL programming engine માં મુખ્ય cursor ના status નાં attributes

AttributeTypeપાછી અપાતી Value નું વર્ણન
%FOUNDBOOLEANજો છેલ્લા FETCH એ એક હરોળ પાછી આપી હોય તો TRUE પાછું આપે છે: નિષ્ફળ ગયો હોય તો FALSE
%NOTFOUNDBOOLEANજો છેલ્લો FETCH એક હરોળ શોધવામાં નિષ્ફળ ગયો હોય તો TRUE પાછું આપે છે: સફળ થયો હોય તો FALSE
%ISOPENBOOLEANજો cursor હાલમાં ખુલ્લો અને memory માં સક્રિય હોય તો TRUE પાછું આપે છે: બંધ હોય તો FALSE
%ROWCOUNTNUMBERખૂલ્યા પછી અત્યાર સુધી લવાયેલી કે અસર પામેલી rows ની કુલ સંખ્યા પાછી આપે છે

Practical

Tracking Ticket Audits with Attributes

-- Enable console output in Oracle environment
SET SERVEROUTPUT ON;

DECLARE
  CURSOR c_high_priority IS
    SELECT id, title FROM tickets WHERE priority = 'High';
    
  v_id tickets.id%TYPE;
  v_title tickets.title%TYPE;
BEGIN
  -- Check if cursor is already active before opening
  IF NOT c_high_priority%ISOPEN THEN
    OPEN c_high_priority;
  END IF;
  
  LOOP
    FETCH c_high_priority INTO v_id, v_title;
    
    -- Stop loop automatically when no rows remain
    EXIT WHEN c_high_priority%NOTFOUND;
    
    DBMS_OUTPUT.PUT_LINE('Fetched row number ' || c_high_priority%ROWCOUNT || ': ' || v_title);
  END LOOP;
  
  DBMS_OUTPUT.PUT_LINE('Total tickets processed: ' || c_high_priority%ROWCOUNT);
  CLOSE c_high_priority;
END;
/

Copy કરીને Oracle FreeSQL ખોલો
Oracle FreeSQL, Oracle SQL નું મફત online editor છે. Code પહેલા copy થઈ જાય છે: તેને ત્યાં paste કરીને Run કરો.

Quiz

ધારો કે એક explicit cursor એ એક loop ના execution દરમિયાન સફળતાપૂર્વક 5 rows મેળવી. Cursor સ્પષ્ટપણે બંધ થયા પછી તરત %ROWCOUNT ની value શું હશે?

  1. 5
  2. 0
  3. NULL
  4. એક INVALID_CURSOR exception ઊભી કરે છે
Show the answer

એક INVALID_CURSOR exception ઊભી કરે છે

એક explicit cursor બંધ થયા પછી એનું કોઈ પણ attribute વાપરવાથી Oracle માં તરત એક INVALID_CURSOR runtime error ઊભી થાય છે. એક વાર બંધ થયા પછી, cursor નો memory નો સંદર્ભ સંપૂર્ણપણે નાશ પામે છે, જેથી એના status ના નિશાનો ઉપલબ્ધ રહેતા નથી.

Watch out

Implicit સામે Explicit %NOTFOUND નો ફાંદો

ભારતીય BCA university ની laboratory ની practicals માં એક classic ભૂલ છે ખોટો cursor નો prefix વાપરવો. જો તમે c_tickets નામનો એક explicit cursor તપાસી રહ્યા હો, તમારે c_tickets%NOTFOUND વાપરવું જ પડશે. જો તમે ભૂલથી SQL%NOTFOUND લખો, Oracle તમારા explicit cursor ને બદલે છેલ્લી implicit SQL query ની સ્થિતિ તપાસશે! આનાથી loops ખોટી રીતે ચાલે છે કે અનંત સમય ચાલે છે કારણ કે તમે ખોટા dashboard ના સૂચકને પૂછી રહ્યા છો.

Think first

માનસિક પડકાર: %ROWCOUNT ની શરૂઆતની સ્થિતિ

કોઈ પણ FETCH statement ચાલે એ પહેલાં પણ એક explicit cursor સફળતાપૂર્વક ખૂલ્યા પછી તરત, તમને શું લાગે છે કે %ROWCOUNT કઈ આંકડાકીય value રાખે છે? Tap કરતાં પહેલાં મનમાં જવાબ કાઢો.

Show the answer

એ 0 પાછું આપે છે! જ્યારે તમે એક cursor ખોલો, Oracle query ચલાવે છે અને સક્રિય સમૂહ તૈયાર કરે છે, પણ ખરેખર શૂન્ય rows તમારા સ્થાનિક variables માં લવાઈ છે. તેથી, %ROWCOUNT 0 થી શરૂ થાય છે અને દર વખતે એક FETCH ની કામગીરી સફળતાપૂર્વક એક record મેળવે ત્યારે 1 થી વધે છે.

Theory

Database Audits અને ભવિષ્યનું Synchronization

Production ના helpdesk ના વાતાવરણોમાં વિગતવાર management ના reports બનાવતી વખતે કે જથ્થાબંધ processing ના આંકડા track કરતી વખતે cursor attributes અત્યંત મહત્ત્વનાં છે. તમે આગલા semester માં તમારા Sem 3 BCA303 ના SQLite mobile database ના course માં હરોળ ગણવાની ભાતો પર ખૂબ આધાર રાખશો. જ્યારે sync ની routines એક દૂરના master server માંથી updates લાવે, તમારો code mobile ના user interface ની screen પર પ્રગતિની ટકાવારી દોરવા સ્થાનિક loop ની ગણતરીઓ વાપરશે.

Summary

Key takeaways

  • Cursor attributes એ ખાસ boolean કે આંકડાકીય નિશાનો છે જે execution ની સ્થિતિ વર્ણવે છે.
  • એક OPEN કે CLOSE command ચલાવતાં પહેલાં cursor સક્રિય છે કે નહીં એ ચકાસવા %ISOPEN વાપરો.
  • %FOUND અને %NOTFOUND નિશાનો દર્શાવે છે કે છેલ્લી FETCH ની કામગીરીએ સફળતાપૂર્વક data પાછો આપ્યો કે નહીં.
  • %ROWCOUNT attribute cursor ખૂલ્યા પછી process થયેલી rows ની સંચિત સંખ્યા track કરે છે.
  • એક બંધ થયેલા explicit cursor પર attributes નો સંદર્ભ લેવાનો પ્રયાસ તરત એક exception ની error માં પરિણમે છે.
  • Memory hook: ISOPEN થી ખોલો, NOTFOUND થી ચકાસો, ROWCOUNT થી ગણો, અને બંધ કરતાં પહેલાં તપાસો!

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Cursors and Exception Handling, Packages, Triggers

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati

Cursor Attributes: %FOUND, %NOTFOUND, %ISOPEN, %ROWCOUNT · Mastering SQL - PL/SQL (SEC-02 option A) · Gri-Learn