PL / SQL – Markører (Norsk)
I dette kapitlet vil vi diskutere markørene i PL / SQL. Oracle oppretter et minneområde, kjent som kontekstområdet, for behandling av en SQL-setning, som inneholder all informasjonen som trengs for å behandle utsagnet; for eksempel antall rader som er behandlet osv.
En markør er en peker til dette kontekstområdet. PL / SQL styrer kontekstområdet gjennom en markør. En markør holder radene (en eller flere) returnert av en SQL-setning. Settet med rader markøren har, blir referert til som det aktive settet.
Du kan navngi en markør slik at det kan bli referert til det i et program for å hente og behandle radene som returneres av SQL-setningen av gangen. Det er to typer markører –
- Implisitte markører
- Eksplisitte markører
Implisitte markører
Implisitte markører blir automatisk opprettet av Oracle når en SQL-setning kjøres, når det ikke er noen eksplisitt markør for setningen. Programmerere kan ikke kontrollere de implisitte markørene og informasjonen i den.
Hver gang en DML-setning (INSERT, UPDATE og DELETE) blir utstedt, er en implisitt markør tilknyttet denne utsagnet. For INSERT-operasjoner inneholder markøren dataene som må settes inn. For OPPDATERING og SLETT-operasjoner identifiserer markøren radene som vil bli berørt.
I PL / SQL kan du referere til den siste implisitte markøren som SQL-markøren, som alltid har attributter som% FOUND ,% ISOPEN,% NOTFOUND og% ROWCOUNT. SQL-markøren har flere attributter,% BULK_ROWCOUNT og% BULK_EXCEPTIONS, designet for bruk med FORALL-setningen. Tabellen nedenfor gir en beskrivelse av de mest brukte attributtene –
S.No | Attributt & Beskrivelse |
---|---|
1 |
% Funnet Returnerer SANT hvis en INSERT-, UPDATE- eller DELETE-setning påvirket en eller flere rader eller en SELECT INTO-setning returnerte en eller flere rader. Ellers returnerer den FALSE. |
2 |
% NOTFOUND Det logiske motsatte av% FOUND. Den returnerer SANT hvis en INSERT-, UPDATE- eller DELETE-setning ikke påvirket noen rader, eller en SELECT INTO-setning returnerte ingen rader. Ellers returnerer den FALSE. |
3 |
% ISOPEN Returnerer alltid FALSE for implisitte markører, fordi Oracle lukker SQL-markøren automatisk etter å ha utført den tilknyttede SQL-setningen. |
4 |
% ROWCOUNT Returnerer antall rader som er berørt av en INSERT-, UPDATE- eller DELETE-setning, eller returneres av en SELECT INTO-setning. |
Enhver SQL-markørattributt blir tilgjengelig som sql% attributtnavn som vist nedenfor i eksemplet.
Eksempel
Vi bruker KUNDER-tabellen vi hadde opprettet og brukt i de foregående kapitlene.
Det følgende programmet vil oppdatere tabellen og øke lønnen til hver kunde med 500 og bruke SQL% ROWCOUNT-attributt for å bestemme antallet berørte rader –
Når koden ovenfor kjøres ved SQL-ledeteksten, gir den følgende resultat –
6 customers selected PL/SQL procedure successfully completed.
Hvis du sjekker postene i kundetabellen, vil du oppdage at radene er oppdatert –
Eksplisitte markører
Eksplisitte markører er programmererdefinerte markører for å få mer kontroll over kontekstområdet. En eksplisitt markør bør defineres i erklæringsdelen av PL / SQL-blokken. Den opprettes på en SELECT-uttalelse som returnerer mer enn én rad.
Syntaksen for å opprette en eksplisitt markør er –
CURSOR cursor_name IS select_statement;
Arbeider med en eksplisitt markør inkluderer følgende trinn –
- Deklarere markøren for initialisering av minnet
- Åpne markøren for tildeling av minnet
- Hente markøren for henting av data
- Lukking av markøren for å frigjøre det tildelte minnet
Erklæring om markøren
Erklæring av markøren definerer markøren med et navn og tilhørende SELECT-setning. For eksempel –
CURSOR c_customers IS SELECT id, name, address FROM customers;
Åpne markøren
Åpne markøren tildeler minnet til markøren og gjør den klar for å hente de returnerte radene av SQL-setningen inn i den. For eksempel åpner vi den definerte markøren ovenfor som følger –
OPEN c_customers;
Henter markøren
Å hente markøren innebærer tilgang til en rad kl. en gang. For eksempel vil vi hente rader fra den ovennevnte markøren som følger –
FETCH c_customers INTO c_id, c_name, c_addr;
Lukke markøren
Å lukke markøren betyr å slippe det tildelte minnet.For eksempel vil vi lukke den ovenfor åpnede markøren som følger –
CLOSE c_customers;
Eksempel
Følgende er et komplett eksempel for å illustrere konseptene av eksplisitte markører & minua;
Når koden ovenfor kjøres ved SQL-ledeteksten, gir den følgende resultat –
1 Ramesh Ahmedabad 2 Khilan Delhi 3 kaushik Kota 4 Chaitali Mumbai 5 Hardik Bhopal 6 Komal MP PL/SQL procedure successfully completed.