PL / SQL – markörer (Svenska)
I detta kapitel kommer vi att diskutera markörerna i PL / SQL. Oracle skapar ett minnesområde, så kallat kontextområdet, för bearbetning av ett SQL-uttalande, som innehåller all information som behövs för att bearbeta uttalandet. till exempel antalet rader som bearbetats osv.
En markör är en pekare till detta sammanhang. PL / SQL styr kontextområdet genom en markör. En markör innehåller raderna (en eller flera) som returneras av ett SQL-uttalande. Den uppsättning rader som markören har kallas den aktiva uppsättningen.
Du kan namnge en markör så att den kan hänvisas till i ett program för att hämta och bearbeta de rader som returneras av SQL-satsen, en vid en tid. Det finns två typer av markörer –
- Implicita markörer
- Explicita markörer
Implicita markörer
Implicita markörer skapas automatiskt av Oracle när ett SQL-uttalande körs, när det inte finns någon uttrycklig markör för uttalandet. Programmerare kan inte styra de implicita markörerna och informationen i den.
När ett DML-uttalande (INSERT, UPDATE och DELETE) utfärdas är en implicit markör associerad med detta uttalande. För INSERT-operationer innehåller markören de data som måste infogas. För UPDATE- och DELETE-operationer identifierar markören de rader som skulle påverkas.
I PL / SQL kan du hänvisa till den senaste implicita markören som SQL-markören, som alltid har attribut som% FOUND ,% ISOPEN,% NOTFOUND och% ROWCOUNT. SQL-markören har ytterligare attribut,% BULK_ROWCOUNT och% BULK_EXCEPTIONS, utformade för användning med FORALL-satsen. Följande tabell ger beskrivning av de mest använda attributen –
S.No | Attribut & Beskrivning |
---|---|
1 |
% FOUND Returnerar SANT om ett INSERT-, UPDATE- eller DELETE-uttalande påverkade en eller flera rader eller ett SELECT INTO-uttalande returnerade en eller flera rader. Annars returnerar den FALSE. |
2 |
% NOTFOUND Den logiska motsatsen till% FOUND. Det returnerar SANT om ett INSERT-, UPDATE- eller DELETE-uttalande inte påverkade några rader, eller ett SELECT INTO-uttalande returnerade inga rader. Annars returnerar den FALSE. |
3 |
% ISOPEN Returnerar alltid FALSE för implicita markörer, eftersom Oracle stänger SQL-markören automatiskt efter att ha associerat SQL-uttalandet. |
4 |
% ROWCOUNT Returnerar antalet rader som påverkas av en INSERT-, UPDATE- eller DELETE-sats, eller returneras av en SELECT INTO-sats. |
Alla SQL-markörattribut kommer åt som sql% attributnamn som visas nedan i exemplet.
Exempel
Vi kommer att använda CUSTOMERS-tabellen som vi skapat och använt i föregående kapitel.
Följande program uppdaterar tabellen och höjer lönen för varje kund med 500 och använder SQL% ROWCOUNT-attribut för att bestämma antalet berörda rader –
När ovanstående kod körs vid SQL-prompten ger den följande resultat –
6 customers selected PL/SQL procedure successfully completed.
Om du kontrollerar posterna i kundtabellen kommer du att upptäcka att raderna har uppdaterats –
Explicita markörer
Explicita markörer är programmerardefinierade markörer för att få mer kontroll över sammanhangsområdet. En tydlig markör bör definieras i deklarationsavsnittet i PL / SQL-blocket. Den skapas på ett SELECT-uttalande som returnerar mer än en rad.
Syntaxen för att skapa en explicit markör är –
CURSOR cursor_name IS select_statement;
Fungerar med en tydlig markör innehåller följande steg –
- Förklara markören för initialisering av minnet
- Öppna markören för allokering av minnet
- Hämta markören för att hämta data
- Stänga markören för att frigöra tilldelat minne
Förklara markören
Förklara markören definierar markören med ett namn och tillhörande SELECT-uttalande. Till exempel –
CURSOR c_customers IS SELECT id, name, address FROM customers;
Öppna markören
Öppna markören tilldelar markören till markören och gör den redo för att hämta de returnerade raderna av SQL-satsen till den. Vi öppnar till exempel den ovan definierade markören enligt följande –
OPEN c_customers;
Att hämta markören
Att hämta markören innebär att du får åtkomst till en rad på en tid. Till exempel kommer vi att hämta rader från den ovan öppnade markören enligt följande –
FETCH c_customers INTO c_id, c_name, c_addr;
Stänga markören
Att stänga markören betyder att du släpper det tilldelade minnet.Till exempel stänger vi den ovan öppnade markören enligt följande –
CLOSE c_customers;
Exempel
Följande är ett komplett exempel för att illustrera begreppen av tydliga markörer & minua;
När ovanstående kod körs vid SQL-prompten, ger den följande resultat –
1 Ramesh Ahmedabad 2 Khilan Delhi 3 kaushik Kota 4 Chaitali Mumbai 5 Hardik Bhopal 6 Komal MP PL/SQL procedure successfully completed.