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

โšก Smart opsummering

PL/SQL-blokken er den grundlรฆggende enhed, der grupperer PL/SQL- og SQL-instruktioner, sรฅ de udfรธres sammen i stedet for linje for linje. Hver blok har en deklarations-, udfรธrelses- og undtagelseshรฅndteringssektion, og blokkene er enten anonyme eller navngivne.

  • ๐Ÿงฑ Kerneidรฉ: Code er grupperet i en blok, der kรธrer som en helhed og blander procedurel logik med SQL.
  • ๐Ÿ“ Erklรฆringsafsnit: Valgfri; deklarerer variabler, cursorer, undtagelser og underprogrammer, der bruges i blokken.
  • โ–ถ ๏ธ Udfรธrelsessektion: Obligatorisk; begynder med BEGIN og indeholder mindst รฉn eksekverbar sรฆtning.
  • ๐Ÿ›ก๏ธ Undtagelsesafsnit: Valgfri; starter med EXCEPTION og hรฅndterer kรธrselsfejl.
  • ๐Ÿท๏ธ To typer: Anonyme blokke er unavngivne og kรธres รฉn gang; navngivne blokke gemmes som databaseobjekter.
  • ๐Ÿ” Navngivne blokke: Procedurer og funktioner er navngivne blokke, der kan kaldes gentagne gange.
  • โ›” terminator: END lukker blokken, og et skrรฅstreg sender den til compileren.

PL/SQL-blokstruktur og syntaks

Hvad er en PL/SQL-blok?

I PL/SQL udfรธres kode ikke i et enkeltlinjeformat; den udfรธres altid af grouping koden til et enkelt element kaldet en blok. I denne vejledning lรฆrer du om disse blokke.

Blokke indeholder bรฅde PL/SQL- og SQL-instruktioner. Alle disse instruktioner udfรธres som en helhed i stedet for รฉn instruktion ad gangen.

Blokstruktur

PL/SQL-blokke har en foruddefineret struktur, hvor koden er grupperet. Nedenfor er de forskellige sektioner af en PL/SQL-blok:

  1. Erklรฆringsafsnit
  2. Udfรธrelsessektion
  3. Undtagelses-Hรฅndtering sektion

Billedet nedenfor illustrerer de forskellige PL/SQL-bloksektioner og deres rรฆkkefรธlge.

PL/SQL-bloksektioner og -rรฆkkefรธlge

Erklรฆring sektion

Dette er den fรธrste sektion af en PL/SQL-blok, og den er valgfri. Det er den sektion, hvor variabler, cursorer, undtagelser, underprogrammer, pragma-instruktioner og samlinger, der er nรธdvendige i blokken, deklareres. Et par flere karakteristika for denne del:

  • Dette afsnit er valgfrit og kan springes over, hvis der ikke er behov for erklรฆringer.
  • Det bรธr vรฆre den fรธrste sektion i en PL/SQL-blok, hvis en sรฅdan findes.
  • Det starter med nรธgleordet 'DECLARE' for triggere og anonyme blokke. For andre underprogrammer er dette nรธgleord ikke til stede; i stedet markerer delen efter underprogramnavnet deklarationsafsnittet.
  • Det bรธr altid efterfรธlges af udfรธrelsesafsnittet.

Udfรธrelsesafdeling

Udfรธrelsesdelen er den primรฆre og obligatoriske del, der rent faktisk udfรธrer den kode, der er skrevet i den. Da PL / SQL forventer eksekverbare sรฆtninger, denne blok mรฅ ikke vรฆre tom og skal have mindst รฉn gyldig eksekverbar linje. Et par flere karakteristika for denne del:

  • Den kan indeholde bรฅde PL/SQL-kode og SQL-kode.
  • Den kan indeholde en eller mange blokke som indbyggede blokke.
  • Det starter med nรธgleordet 'BEGIN'.
  • Den skal efterfรธlges enten af โ€‹โ€‹'END' eller af undtagelseshรฅndteringssektionen, hvis den findes.

Undtagelseshรฅndteringssektion

Undtagelser er uundgรฅelige fejl, der opstรฅr under kรธrsel, og hรฅndteringen af โ€‹โ€‹dem Oracle indeholder en sektion til hรฅndtering af undtagelser i blokke. Denne sektion kan ogsรฅ indeholde PL/SQL-sรฆtninger, og den er valgfri.

  • Dette er det afsnit, hvor en undtagelse, der er opstรฅet i udfรธrelsesblokken, hรฅndteres.
  • Det er den sidste del af PL/SQL-blokken.
  • Kontrol fra denne sektion kan aldrig vende tilbage til udfรธrelsesblokken.
  • Det starter med nรธgleordet 'UNDTAGELSE'.
  • Det skal altid efterfรธlges af nรธgleordet 'END'.

Nรธgleordet 'END' markerer slutningen af โ€‹โ€‹PL/SQL-blokken.

PL/SQL-bloksyntaks

Nedenfor er syntaksen for PL/SQL-blokstrukturen.

PL/SQL-bloksyntaks

DECLARE --optional
<declarations>

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

EXCEPTION --optional
<exception handles>

END; --mandatory
/

Bemรฆrk: En blok skal altid efterfรธlges af '/', som sender information til compileren om blokkens afslutning.

Typer af PL/SQL-blokke

PL/SQL-blokke findes primรฆrt i to typer:

  1. Anonyme blokke
  2. Navngivne blokke

De to sammenlignes kort nedenfor, fรธr hver enkelt beskrives.

Aspect Anonym blok Navngivet blok
Har et navn Ingen Ja
Gemt i databasen Ingen Ja, som et objekt
Starter med ERKLร†R eller BEGYND SKAB
Genanvendelig Kun samme session Kan kaldes nรฅr som helst

Anonyme blokke

Anonyme blokke er PL/SQL-blokke, der ikke har fรฅet tildelt noget navn. De skal oprettes og bruges i samme session, fordi de ikke gemmes pรฅ serveren som databaseobjekter.

Da de ikke er gemt i databasen, behรธver de ikke et separat kompileringstrin. De skrives og udfรธres direkte, og kompilering og udfรธrelse sker i en enkelt proces. Et par flere karakteristika:

  • Disse blokke har intet referencenavn.
  • De starter med nรธgleordet 'DECLARE' eller 'BEGIN'.
  • Da de ikke har noget referencenavn, kan de ikke gemmes til senere brug og skal oprettes og udfรธres i samme session.
  • De kan kalde andre navngivne blokke, men et kald til en anonym blok er ikke muligt, da den ikke har nogen reference.
  • De kan indeholde en indlejret blok, der er navngivet eller anonym, og de kan ogsรฅ vรฆre indlejret i en hvilken som helst blok.
  • De kan have alle tre sektioner, hvoraf udfรธrelsessektionen er obligatorisk, og de to andre er valgfrie.

Navngivne blokke

Navngivne blokke har et specifikt og unikt navn. De gemmes som databaseobjekter pรฅ serveren, sรฅ de kan henvises til eller bruges, sรฅ lรฆnge de er til stede. Kompileringsprocessen for navngivne blokke sker separat, nรฅr de oprettes som databaseobjekter. Et par flere karakteristika:

  • Disse blokke kan kaldes fra andre blokke.
  • Blokstrukturen er den samme som en anonym blok, bortset fra at den aldrig starter med 'DECLARE'. I stedet starter den med 'CREATE', som instruerer compileren til at oprette den som et databaseobjekt.
  • Disse blokke kan indlejres i andre blokke og kan ogsรฅ indeholde indlejrede blokke.
  • Navngivne blokke er grundlรฆggende af to typer:
  1. Procedure
  2. Funktion

Du kan lรฆse mere om disse navngivne blokke i guiden til procedurer og funktioner.

Ofte Stillede Spรธrgsmรฅl

Kun udfรธrelsesafsnittet, som starter med BEGIN og slutter med END. Afsnittene om deklaration og hรฅndtering af undtagelser er valgfrie og kan udelades, hvis de ikke er nรธdvendige.

En anonym blok har intet navn, gemmes ikke og kรธrer i den samme session. En navngivet blok, sรฅsom en procedure eller funktion, gemmes som et databaseobjekt og kan kaldes gentagne gange.

I vรฆrktรธjer som SQL*Plus fortรฆller skrรฅstregen pรฅ sin egen linje compileren, at blokken er fรฆrdig og skal kรธres. Uden den bliver vรฆrktรธjet ved med at vente pรฅ mere input.

Ja. AI kan pakke logikken ind i en CREATE PROCEDURE-header, tilfรธje parametre og flytte deklarationer pรฅ plads. Test resultatet, da en gemt version muligvis krรฆver eksplicitte parametertilstande og fejlhรฅndtering.

Ja. Deklarations- og undtagelsessektionerne er uafhรฆngige muligheder. En blok kan begynde ved BEGIN, springe deklarationer over og stadig inkludere en EXCEPTION-sektion fรธr END for at fange kรธrselsfejl.

Opsummer dette indlรฆg med: