PL/SQL-blokk: Struktur, syntaks og anonymt eksempel

โšก Smart oppsummering

PL/SQL-blokken er den grunnleggende enheten som grupperer PL/SQL- og SQL-instruksjoner slik at de kjรธres sammen i stedet for linje for linje. Hver blokk har en deklarasjons-, utfรธrelses- og unntakshรฅndteringsdel, og blokkene er enten anonyme eller navngitte.

  • ๐Ÿงฑ Kjerneide: Code er gruppert i en blokk som kjรธrer som en helhet, og blander prosedyrelogikk med SQL.
  • ๐Ÿ“ Erklรฆringsseksjon: Valgfritt; deklarerer variabler, markรธrer, unntak og underprogrammer som brukes i blokken.
  • โ–ถ ๏ธ Utfรธrelsesseksjon: Obligatorisk; begynner med BEGIN og inneholder minst รฉn kjรธrbar setning.
  • ๐Ÿ›ก๏ธ Unntaksseksjon: Valgfritt; starter med EXCEPTION og hรฅndterer kjรธretidsfeil.
  • ๐Ÿท๏ธ To typer: Anonyme blokker er uten navn og kjรธres รฉn gang; navngitte blokker lagres som databaseobjekter.
  • ๐Ÿ” Navngitte blokker: Prosedyrer og funksjoner er navngitte blokker som kan kalles gjentatte ganger.
  • โ›” terminator: END lukker blokken, og et skrรฅstrek sender den til kompilatoren.

PL/SQL-blokkstruktur og syntaks

Hva er en PL/SQL-blokk?

I PL/SQL kjรธres ikke kode i enlinjeformat; den kjรธres alltid av grouping koden til et enkelt element kalt en blokk. I denne veiledningen lรฆrer du om disse blokkene.

Blokker inneholder bรฅde PL/SQL- og SQL-instruksjoner. Alle disse instruksjonene utfรธres som en helhet i stedet for รฉn instruksjon om gangen.

Blokkstruktur

PL/SQL-blokker har en forhรฅndsdefinert struktur der koden er gruppert. Nedenfor er de ulike delene av en PL/SQL-blokk:

  1. Erklรฆringsdelen
  2. Utfรธrelsesseksjonen
  3. Unntak-Hรฅndtering seksjon

Bildet nedenfor illustrerer de forskjellige PL/SQL-blokkdelene og rekkefรธlgen deres.

PL/SQL-blokkseksjoner og rekkefรธlge

Erklรฆringsseksjonen

Dette er den fรธrste delen av en PL/SQL-blokk, og den er valgfri. Det er delen der variabler, markรธrer, unntak, underprogrammer, pragma-instruksjoner og samlinger som trengs i blokken deklareres. Noen flere egenskaper ved denne delen:

  • Denne delen er valgfri og kan hoppes over hvis det ikke er behov for noen deklarasjoner.
  • Det bรธr vรฆre den fรธrste delen i en PL/SQL-blokk, hvis den finnes.
  • Det starter med nรธkkelordet ยซDECLAREยป for triggere og anonyme blokker. For andre underprogrammer finnes ikke dette nรธkkelordet; i stedet markerer delen etter underprogramnavnet deklarasjonsdelen.
  • Den bรธr alltid etterfรธlges av utfรธrelsesdelen.

Utfรธrelsesseksjonen

Utfรธrelsesdelen er den viktigste og obligatoriske delen som faktisk utfรธrer koden som er skrevet inni den. Siden PL / SQL forventer kjรธrbare setninger, denne blokken kan ikke vรฆre tom og mรฅ ha minst รฉn gyldig kjรธrbar linje. Noen flere egenskaper ved denne delen:

  • Den kan inneholde bรฅde PL/SQL-kode og SQL-kode.
  • Den kan inneholde รฉn eller mange blokker inni seg som nestede blokker.
  • Det starter med nรธkkelordet ยซBEGINยป.
  • Den bรธr etterfรธlges av enten 'END' eller av unntakshรฅndteringsdelen, hvis den finnes.

Seksjon for unntakshรฅndtering

Unntak er uunngรฅelige feil som oppstรฅr under kjรธretid, og for รฅ hรฅndtere dem Oracle inneholder en seksjon for hรฅndtering av unntak i blokker. Denne seksjonen kan ogsรฅ inneholde PL/SQL-setninger, og den er valgfri.

  • Dette er delen der et unntak som oppstรฅr i utfรธrelsesblokken hรฅndteres.
  • Det er den siste delen av PL/SQL-blokken.
  • Kontroll fra denne delen kan aldri gรฅ tilbake til utfรธrelsesblokken.
  • Det starter med nรธkkelordet ยซUNNTAKยป.
  • Det skal alltid etterfรธlges av nรธkkelordet ยซENDยป.

Nรธkkelordet 'END' markerer slutten pรฅ PL/SQL-blokken.

PL/SQL blokksyntaks

Nedenfor er syntaksen til PL/SQL-blokkstrukturen.

PL/SQL-blokksyntaks

DECLARE --optional
<declarations>

BEGIN --mandatory
<executable statements. At least one executable statement is mandatory>

EXCEPTION --optional
<exception handles>

END; --mandatory
/

OBS: En blokk skal alltid etterfรธlges av '/', som sender informasjon til kompilatoren om slutten av blokken.

Typer av PL/SQL-blokker

PL/SQL-blokker er hovedsakelig av to typer:

  1. Anonyme blokker
  2. Navngitte blokker

De to sammenlignes raskt nedenfor fรธr hver av dem beskrives.

Aspekt Anonym blokk Navngitt blokk
Har et navn Nei Ja
Lagret i databasen Nei Ja, som et objekt
Begynner med ERKLร†R eller BEGYNN SKAPE
Gjenbruk Kun samme รธkt Kan ringes inn nรฅr som helst

Anonyme blokker

Anonyme blokker er PL/SQL-blokker som ikke har noe tildelt navn. De mรฅ opprettes og brukes i samme รธkt fordi de ikke lagres pรฅ serveren som databaseobjekter.

Siden de ikke lagres i databasen, trenger de ikke noe separat kompileringstrinn. De skrives og utfรธres direkte, og kompilering og utfรธrelse skjer i รฉn prosess. Noen flere kjennetegn:

  • Disse blokkene har ikke noe referansenavn.
  • De starter med nรธkkelordet ยซDECLAREยป eller ยซBEGINยป.
  • Fordi de ikke har noe referansenavn, kan de ikke lagres for senere bruk og mรฅ opprettes og kjรธres i samme รธkt.
  • De kan kalle andre navngitte blokker, men et kall til en anonym blokk er ikke mulig, da den ikke har noen referanse.
  • De kan inneholde en nestet blokk som er navngitt eller anonym, og de kan ogsรฅ nestes inne i en hvilken som helst blokk.
  • De kan ha alle tre seksjonene, hvorav utfรธrelsesdelen er obligatorisk og de to andre er valgfrie.

Navngitte blokker

Navngitte blokker har et spesifikt og unikt navn. De lagres som databaseobjekter pรฅ serveren, slik at de kan refereres til eller brukes sรฅ lenge de er til stede. Kompileringsprosessen for navngitte blokker skjer separat nรฅr de opprettes som databaseobjekter. Noen flere egenskaper:

  • Disse blokkene kan kalles fra andre blokker.
  • Blokkstrukturen er den samme som en anonym blokk, bortsett fra at den aldri starter med 'DECLARE'. I stedet starter den med 'CREATE', som instruerer kompilatoren til รฅ opprette den som et databaseobjekt.
  • Disse blokkene kan nestes i andre blokker og kan ogsรฅ inneholde nestede blokker.
  • Navngitte blokker er i hovedsak av to typer:
  1. Prosedyre
  2. Funksjon

Du kan lรฆre mer om disse navngitte blokkene i veiledningen til prosedyrer og funksjoner.

Spรธrsmรฅl og svar

Bare utfรธrelsesdelen, som begynner med BEGIN og slutter med END. Deklarasjons- og unntakshรฅndteringsdelene er valgfrie og kan utelates hvis de ikke er nรธdvendige.

En anonym blokk har ikke noe navn, lagres ikke og kjรธrer i samme รธkt. En navngitt blokk, for eksempel en prosedyre eller funksjon, lagres som et databaseobjekt og kan kalles gjentatte ganger.

I verktรธy som SQL*Plus forteller skrรฅstreken pรฅ sin egen linje kompilatoren at blokken er fullfรธrt og bรธr kjรธres. Uten den venter verktรธyet stadig pรฅ mer input.

Ja. AI kan pakke logikken inn i en CREATE PROCEDURE-header, legge til parametere og flytte deklarasjoner pรฅ plass. Test resultatet, siden en lagret versjon kan trenge eksplisitte parametermoduser og feilhรฅndtering.

Ja. Deklarasjons- og unntaksdelene er uavhengige alternativer. En blokk kan begynne ved BEGIN, hoppe over deklarasjoner og fortsatt inkludere en EXCEPTION-del fรธr END for รฅ fange opp kjรธretidsfeil.

Oppsummer dette innlegget med: