PL / SQL – markører
I dette kapitel vil vi diskutere markørerne i PL / SQL. Oracle opretter et hukommelsesområde, kendt som kontekstområdet, til behandling af en SQL-sætning, som indeholder alle de oplysninger, der er nødvendige for at behandle udsagnet; for eksempel antallet af behandlede rækker osv.
En markør er en markør til dette kontekstområde. PL / SQL styrer kontekstområdet gennem en markør. En markør indeholder rækkerne (en eller flere) returneret af en SQL-sætning. Sættet med rækker, som markøren holder, kaldes det aktive sæt.
Du kan navngive en markør, så det kan henvises til i et program for at hente og behandle de rækker, der returneres af SQL-sætningen, en på et tidspunkt. Der er to typer markører –
- Implicitte markører
- Eksplicitte markører
Implicitte markører
Implicitte markører oprettes automatisk af Oracle, hver gang en SQL-sætning udføres, når der ikke er nogen eksplicit markør for udsagnet. Programmører kan ikke kontrollere de implicitte markører og informationen i den.
Når der udstedes en DML-sætning (INSERT, UPDATE og DELETE), er en implicit markør knyttet til denne erklæring. Ved INSERT-operationer indeholder markøren de data, der skal indsættes. For OPDATERING og SLETNING-handlinger identificerer markøren de rækker, der vil blive berørt.
I PL / SQL kan du henvise til den seneste implicitte markør som SQL-markøren, som altid har attributter som% FOUND ,% ISOPEN,% NOTFOUND og% ROWCOUNT. SQL-markøren har yderligere attributter,% BULK_ROWCOUNT og% BULK_EXCEPTIONS, designet til brug sammen med FORALL-sætningen. Følgende tabel giver en beskrivelse af de mest anvendte attributter –
S.No | Attribut & Beskrivelse |
---|---|
1 |
% FOUND Returnerer SAND, hvis en INSERT-, UPDATE- eller DELETE-sætning påvirkede en eller flere rækker, eller en SELECT INTO-sætning returnerede en eller flere rækker. Ellers returnerer den FALSK. |
2 |
% NOTFOUND Det logiske modsatte af% FOUND. Det returnerer SAND, hvis en INSERT-, UPDATE- eller DELETE-sætning ikke påvirkede nogen rækker, eller en SELECT INTO-sætning returnerede ingen rækker. Ellers returnerer den FALSE. |
3 |
% ISOPEN Returnerer altid FALSE for implicitte markører, fordi Oracle lukker SQL-markøren automatisk efter udførelse af den tilknyttede SQL-sætning. |
4 |
% ROWCOUNT Returnerer antallet af rækker, der er påvirket af en INSERT-, UPDATE- eller DELETE-sætning, eller returneres af en SELECT INTO-sætning. |
Enhver SQL-markørattribut får adgang som sql% attributnavn som vist nedenfor i eksemplet.
Eksempel
Vi bruger CUSTOMERS-tabellen, som vi havde oprettet og brugt i de foregående kapitler.
Det følgende program opdaterer tabellen og øger hver kundes løn med 500 og bruger SQL% ROWCOUNT-attribut til bestemmelse af antallet af berørte rækker –
Når ovenstående kode udføres ved SQL-prompten, producerer den følgende resultat –
6 customers selected PL/SQL procedure successfully completed.
Hvis du tjekker posterne i kundetabellen, finder du, at rækkerne er blevet opdateret –
Eksplicitte markører
Eksplicitte markører er programmørdefinerede markører for at få mere kontrol over kontekstområdet. En eksplicit markør skal defineres i erklæringsafsnittet i PL / SQL-blokken. Det oprettes på en SELECT-sætning, der returnerer mere end en række.
Syntaksen til oprettelse af en eksplicit markør er –
CURSOR cursor_name IS select_statement;
Arbejder med en eksplicit markør inkluderer følgende trin –
- Erklæring om markøren til initialisering af hukommelsen
- Åbning af markøren til tildeling af hukommelsen
- Hentning af markøren til hentning af data
- Lukning af markøren for at frigøre den tildelte hukommelse
Erklæring om markøren
Erklæring om markøren definerer markøren med et navn og den tilknyttede SELECT-sætning. For eksempel –
CURSOR c_customers IS SELECT id, name, address FROM customers;
Åbning af markøren
Åbning af markøren tildeler hukommelsen til markøren og gør den klar til at hente de returnerede rækker af SQL-sætningen ind i det. For eksempel åbner vi den ovenfor definerede markør som følger –
OPEN c_customers;
Henter markøren
At hente markøren indebærer adgang til en række kl. en tid. For eksempel henter vi rækker fra den ovenfor åbnede markør som følger –
FETCH c_customers INTO c_id, c_name, c_addr;
Lukning af markøren
Lukning af markøren betyder frigørelse den tildelte hukommelse.For eksempel lukker vi den ovenfor åbnede markør som følger –
CLOSE c_customers;
Eksempel
Følgende er et komplet eksempel for at illustrere begreberne af eksplicitte markører & minua;
Når ovenstående kode udføres ved SQL-prompten, producerer 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.