sql >> Database teknologi >  >> RDS >> Database

PL/SQL Tutorial:Alt du behøver at vide om PL/SQL

PL/SQL er et proceduresprog, der overvinder de mangler, som Structured Query Language står over for. Det er en udvidelse af SQL, og vi kan endda bruge SQL-forespørgsler uden besvær i enhver PL/SQL-applikation eller -program. I denne PL/SQL-tutorial vil vi gennemgå de grundlæggende begreber i PL/SQL i detaljer. Følgende emner er dækket i denne artikel.

  • Hvad er PL/SQL?
    • Funktioner
    • PL/SQL vs SQL
  • Bloker strukturer i PL/SQL
  • PL/SQL-variabler
  • Funktion i PL/SQL
  • PL/SQL-procedure
  • Indlejret blok
  • HVIS-erklæring
  • CASE-erklæring
  • Sløjfeerklæring
    • While Loop Statement
    • For Loop Statement
  • Exceptionel håndtering

Hvad er PL/SQL?

Det står for proceduremæssig sprogudvidelse til det strukturerede forespørgselssprog. Oracle skabte PL/SQL, der udvider nogle begrænsninger af SQL for at give en mere omfattende løsning til at bygge missionskritiske applikationer, der kører på Oracle-databasen.

Funktioner

  • PL/SQL giver funktionaliteten af ​​et proceduresprog såsom beslutningstagning, iteration osv.

  • Ved at bruge en enkelt kommando kan PL/SQL udføre en række forespørgsler.

  • Vi kan også genbruge PL/SQL-enheder såsom funktioner, triggere, procedurer osv., der er gemt i databasen efter oprettelsen.

  • PL/SQL har også en undtagelseshåndteringsblok, der håndterer undtagelserne i PL/SQL.

  • Omfattende fejlkontrol er også mulig ved brug af PL/SQL

  • Applikationerne skrevet i PL/SQL er bærbare til anden hardware og andre operativsystemer, forudsat at Oracle skal være operationelt.

PL/SQL vs SQL

SQL PL/SQL
SQL er en enkelt forespørgsel, der bruges til at udføre DDL- og DML-operationer PL/SQL er en blok af koder, der bruges til at definere et helt program eller procedure/funktion osv.
Det definerer ikke rigtig, hvordan tingene skal gøres, men definerer snarere, hvad der skal gøres PL/SQL definerer, hvordan tingene skal gøres
Den udfører en enkelt sætning Den udfører en blok af udsagn på én gang.
SQL bruges hovedsageligt til at manipulere dataene PL/SQL bruges på den anden side til at oprette applikationer
Den kan ikke indeholde PL/SQL-kode Da det er en SQL-udvidelse, kan den indeholde SQL-kode i den

Bloker strukturer i PL/SQL

PL/SQL organiserer typisk koden i blokke. Kodeblokken uden navn er kendt som en anonym blok. Den er kendt som den anonyme blok, fordi den ikke er gemt i Oracle-databasen. Lad os tage et kig på en anonym blok i PL/SQL.

[DECLARE] erklæringserklæringer;[BEGIN] execution statements; [EXCEPTION] undtagelsesudsagn;END;/

Når vi ser på diagrammet ovenfor, kan vi se, at blokstrukturen er opdelt i fire dele, dvs. deklaration, begyndelse, undtagelse og slutning. Lad os prøve at forstå, hvordan blokstrukturen fungerer i PL/SQL. Ud af alle disse sektioner er udførelsessektionen obligatorisk, og resten er alle valgfrie.

  • ERKLÆR nøgleordet bruges til at for deklarationsafsnittet bruges til at erklære datatyper og strukturer såsom variabler, funktioner osv.

  • BEGIN nøgleordet bruges til udførelsessektionen. Det er obligatorisk og indeholder alle de erklæringer, der skal udføres. Denne blok er, hvor forretningslogikken er defineret, vi kan bruge både proceduremæssige eller SQL-sætninger i denne blok.

  • UNDTAGELSEN nøgleordet bruges til undtagelsesafsnittet. Den indeholder alle undtagelsesudsagn.

  • SLUT nøgleord markerer slutningen af ​​blokken, og skråstreg '/' fortæller værktøjet, at du bruger (Oracle Database Tool) til at udføre PL/SQL-blokken.

Her er et simpelt eksempel for at vise, hvordan vi kan bruge PL/SQL-koden.

BEGIN NULL;END;/

Nu hvor vi ved, hvordan blokstrukturen fungerer i PL/SQL, så lad os forstå de forskellige aspekter af PL/SQL som at erklære, navngive og tildele værdier til variablerne.

PL/SQL-variabler

Variablen i PL/SQL er dybest set et navn, der varierer eller en midlertidig lagerplacering, der understøtter en bestemt datatype. Lad os tage et kig på, hvordan vi kan bruge variablerne i et PL/SQL-program.

Variable navngivningsregler

PL/SQL følger følgende regler for navngivning af variabler.

  • Variablen må ikke være mere end 31 tegn

  • Navnet på variablen skal starte med et ASCII-tegn. Da PL/SQL er store og små bogstaver, vil et stort bogstav og et lille bogstav være forskellige variabler.

  • Efter det første tegn skal der være et specialtegn ($,_ ) eller et hvilket som helst tal.

Navnekonventioner

Brug følgende navngivningskonventioner, der er anført nedenfor for at bruge variablerne.

Præfiks Datatype
v_ VARCHAR2
n_ NUMMER
t_ TABEL
r_ RÆKKE
d_ DATO
b_ BOOLEAN

Erklæring

Lad os prøve at forstå, hvordan variabeldeklaration udføres i PL/SQL

Erklæringen inkluderer variabelnavnet efterfulgt af datatypen og adskilt af et semikolon. Følgende er et eksempel for at vise, hvordan du kan erklære en variabel i PL/SQL.

DECLARE v_name VARCHAR(25); n_age NUMBER(3);BEGIN NULL;END;

Du kan også tilføje længden af ​​datatypen, som vi har gjort i eksemplet ovenfor.

Ankre

Ankeret refererer dybest set til brugen af ​​%TYPE nøgleordet til at erklære en variabel med datatypen forbundet med en kolonnes datatype for en bestemt kolonne i en tabel.

Tag et kig på et eksempel for at forstå dette. Antag, at vi har et bord MEDARBEJDERE, kan vi bruge ankrene på følgende måde.

DECLARE v_name EMPLOYEE.NAME%TYPE; n_age EMPLOYEE.AGE%TYPE;BEGIN NULL;END;/

Opgave

Variabeltildeling er ret let, vi kan bruge tildelingsoperatoren til at tildele værdier til en variabel. Følgende eksempel viser, hvordan vi kan tildele værdier til en variabel.

DECLARE v_name VARCHAR(20); n_course VARCHAR(10);BEGIN v_name ="edureka"; v_course ="sql";END;/

Initialisering

Vi kan også initialisere en værdi for variablen i deklarationsafsnittet. Følgende eksempel viser, hvordan vi kan initialisere værdier til en variabel.

DECLAREv_name VARCHAR(20) ="edureka";n_course VARCHAR(10) ="sql";BEGIN NULL;END;/

Nu hvor vi ved, hvordan vi kan arbejde med variablerne, så lad os prøve at forstå, hvordan vi vil bruge funktioner i PL/SQL.

Funktion i PL/SQL

En funktion i PL/SQL er dybest set en navngivet blok, der returnerer en værdi. Det er også kendt som en underrutine eller et underprogram, følgende syntaks viser, hvordan vi kan bruge funktioner i PL/SQL.

CREATE [OR REPLACE] FUNCTION function_name [( parameter_1 [IN] [OUT] data_type, parameter_2 [IN] [OUT] data_type, parameter_N [IN] [OUT] data_type] RETURN return_data_type IS BEGIN-sætninger returnerer return_data_type; UNDTAGELSE END; /

Først og fremmest skal du angive et funktionsnavn efter nøgleordet. Funktionsnavnet skal starte med et verbum. En funktion kan have ingen, en eller flere parametre, som vi angiver i parametre. Vi er nødt til at specificere datatypen for hver parameter eksplicit, og så kommer tilstanden, som kan en af ​​følgende.

  • IN – IN-parameteren er en skrivebeskyttet parameter.

  • UD – Det er en skrivebeskyttet parameter

  • IND UD – IN OUT parameteren er både read-write parameter.

Her er et simpelt eksempel for at vise, hvordan vi bruger funktioner i PL/SQL.

OPRET ELLER ERSTAT FUNKTION try_parse( iv_number IN VARCHAR2) RETURN NUMBER ISBEGIN RETURN to_number(iv_number); UNDTAGELSE, NÅR andre SÅ TILBAGE NULL;END;

Opkald til en funktion

Lad os prøve at kalde den funktion, vi har lavet i en anonym blok i det følgende eksempel.

INDSTIL SERVEROUTPUT PÅ STØRRELSE 1000000;DECLARE n_x number; n_y nummer; n_z nummer;BEGIN n_x :=try_parse('256'); n_y :=try_parse('29.72'); n_z :=try_parse('pqrs'); DBMS_OUTPUT.PUT_LINE(n_x); DBMS_OUTPUT.PUT_LINE(n_y); DBMS_OUTPUT.PUT_LINE(n_z);END;/

Vi kan også kalde funktionen i en SELECT-sætning. Nu hvor vi ved, hvordan vi kan bruge funktioner i PL/SQL, så lad os prøve at forstå, hvordan vi arbejder med procedurer i PL/SQL.

PL/SQL-procedure

En procedure er dybest set en blok, der udfører en bestemt opgave. Ved hjælp af en procedure kan vi pakke eller indkapsle kompleks forretningslogik og genbruge dem i både applikation og databaselag.

Lad os tage et kig på et simpelt eksempel for at forstå, hvordan proceduren fungerer i PL/SQL

OPRET ELLER ERSTAT PROCEDURE adjust_salary( in_employee_id IN EMPLOYEES.EMPLOYEE_ID%TYPE, in_percent IN NUMBER) ISBEGIN -- opdatering af medarbejders løn OPDATERING medarbejdere SET løn =løn + løn * in_percent / 100 WHERE ansat_id =in_em; 

I ovenstående eksempel har vi to parametre, proceduren justerer lønnen med en given procentdel, og UPDATE-søgeordet opdaterer værdien i lønoplysningerne.

Procedurehoved

Sektionen før søgeordet IS kaldes procedureoverskriften. Følgende er et par tips, man skal være bekendt med, mens man arbejder med procedurer.

  • skema – Det er det valgfrie navn på skemaet, som proceduren hører til.

  • navn – Navnet på proceduren, som skal starte med et verbum.

  • parametre – Det er den valgfri liste over parametre.

  • AUTHID – Det bestemmer, om proceduren skal udføres med den nuværende brugers privilegium eller den oprindelige ejer af proceduren.

Procedurelegeme

Alt, der kommer efter IS-søgeordet, kaldes procedureteksten. Vi har erklæringen, undtagelses- og udførelseserklæringerne i procedureorganet. I modsætning til funktionen bruges RETURN nøgleordet i en procedure til at stoppe udførelsen og returnere kontrollen til den, der ringer.

Opkald til en procedure

Lad os se, hvordan vi kan kalde en procedure i PL/SQL.

 EXEC procedure_name(param1,param2...paramN);

Vi kan kalde procedurerne uden parametre ved blot at bruge EXEC-nøgleordet og procedurenavnet. Nu hvor vi ved, hvordan vi kan arbejde med procedurer, lad os prøve at forstå, hvordan indlejrede blokke bruges i PL/SQL.

Indlejret blok

En indlejret blok er intet andet end en kombination af en eller flere PL/SQL-blokke for at få bedre kontrol over udførelsen og exceptionel håndtering af programmet.

Her er et simpelt eksempel på en indlejret blok.

INDSTIL SERVEROUTPUT PÅ STØRRELSE 1000000;DECLARE n_emp_id EMPLOYEES.EMPLOYEE_ID%TYPE :=&emp_id1;BEGIN DECLARE n_emp_id-medarbejdere.employee_id%TYPE :=&emp_id2; v_navn ansatte.fornavn%TYPE; BEGIN VÆLG fornavn INTO v_navn FRA medarbejdere WHERE ansat_id =n_emp_id; DBMS_OUTPUT.PUT_LINE('Fornavn på medarbejder ' || n_emp_id || ' er ' || v_navn); UNDTAGELSE NÅR no_data_found SÅ DBMS_OUTPUT.PUT_LINE('Medarbejder ' || n_emp_id || 'ikke fundet'); END;END;/

Den ydre PL/SQL-blok i ovenstående eksempel er kendt som den overordnede blok eller omsluttende blok, den indre blok er på den anden side kendt som den underordnede blok eller lukket blok.

Det er ikke en god idé at bruge variablerne med de samme navne i begge blokke, fordi under udførelsen vil den underordnede blokvariabel tilsidesætte den overordnede blokvariabel. Det sker, fordi PL/SQL giver førsteprioritet til variablen inde i sin egen blok.

Bloker etiket

Vi kan løse dette problem med bloketiketten, der hjælper os med at lave referencer til variabler inde i blokke ved hjælp af en etiket.

Her er et simpelt eksempel for at vise, hvordan vi kan bruge en bloketiket.

<>DECLARE...BEGIN...END;

Brug af en bloketiket hjælper med at forbedre kodens læsbarhed, opnå bedre kontrol og lave referencer til blokkene. Nu hvor vi ved, hvordan vi kan arbejde med indlejrede blokke, lad os prøve at forstå, hvordan IF STATEMENT fungerer i PL/SQL.

IF-erklæring

PL/SQL har tre IF STATEMENTS

  • HVIS-SÅ – Det er den enkleste IF STATEMENT, hvis betingelsen er sand, vil udsagn udføres, hvis betingelsen er falsk, gør den ingenting.

  • HVIS-SÅ-ELSE – I denne tilføjes ELSE-sætningen for en alternativ sekvens af udsagn.

  • IF-THEN-ELSEIF – Det giver os mulighed for at udføre flere testbetingelser i en sekvens.

HVIS-SÅ-syntaks

IF condition THEN sequence_of_statements;END IF;

HVIS-SÅ-ANDEN-syntaks

IF condition THEN sequence_of_if_statements;ELSE sequence_of_else_statements;END IF;

HVIS-SÅ-ELSEIF-syntaks

IF condition1 THEN sequence_of_statements1ELSIF condition2 THEN sequence_of_statements2ELSE sequence_of_statements3END IF;

Nu hvor vi er færdige med IF STATEMENT, lad os se på CASE-sætningen i PL/SQL.

CASE-erklæring

CASE-sætningen hjælper grundlæggende med at udføre en sekvens af udsagn baseret på en vælger. En vælger, i dette tilfælde, kan være hvad som helst, det kan være en variabel, funktion eller et simpelt udtryk. Her er et simpelt eksempel til at vise syntaksen for CASE-sætningen i PL/SQL.

[<>]CASE [TRUE | selector] WHEN expression1 THEN sequence_of_statements1; WHEN expression2 THEN sequence_of_statements2; ... WHEN expressionN THEN sequence_of_statementsN; [ELSE sequence_of_statementsN+1;]SLUT CASE [label_name];

I ovenstående syntaks kommer vælgeren efter CASE nøgleordet. PL/SQL vil kun evaluere vælgeren én gang for at bestemme, hvilken sætning der skal udføres.

Efterfulgt af vælgeren er nøgleordet WHEN. Hvis udtrykket opfylder vælgeren, udføres den tilsvarende sætning efter THEN nøgleord.

Nu hvor vi ved, hvordan vi kan bruge en CASE-sætning, så lad os prøve at forstå, hvordan vi vil bruge loop-sætningerne i PL/SQL.

Sløjfeerklæring

En loop-sætning i PL/SQL er en iterativ sætning, der giver dig mulighed for at udføre en sekvens af sætninger flere gange. Her er et simpelt eksempel til at vise syntaksen for en loop-sætning i PL/SQL.

LOOP sequence_of_statements;END LOOP;

Der skal være mindst én eksekverbar sætning mellem nøgleordet LOOP og END LOOP.

Loop med EXIT-erklæring

EXIT og EXIT, når sætninger tillader dig at forlade løkken. EXIT WHEN-sætningen afslutter løkken betinget, mens EXIT afslutter eksekveringen ubetinget.

LOOP ... EXIT WHEN condition;END LOOP;

løkkeetiket

En loop-etiket bruges til at kvalificere navnet på looptællervariablen, når den bruges i en indlejret loop. Følgende er syntaksen for en loop-etiket.

<

Nu hvor vi ved, hvordan vi kan bruge loop-sætningerne, lad os tage et kig på while-løkke-sætninger for bedre forståelse.

While Loop Statement

Vi kan bruge WHILE loop-sætningen, når antallet af eksekveringer ikke er defineret, før eksekveringen starter. Følgende syntaks bruges til en WHILE loop-sætning i PL/SQL.

WHILE conditionLOOP sequence_of_statements;END LOOP;

Betingelsen i syntaksen er en boolsk værdi eller et udtryk, der vurderes til at være enten SAND, FALSK eller NULL. Hvis betingelsen er TRUE, vil sætningerne blive eksekveret, hvis den er FALSE, stopper udførelsen, og kontrollen går til den næste eksekverbare sætning.

Nu hvor vi ved, hvordan vi kan bruge en WHILE loop-sætning, lad os tage et kig på FOR-løkke-sætningen.

For Loop Statement

En FOR loop-sætning i PL/SQL giver os mulighed for at udføre en sekvens af udsagn et bestemt antal gange. Følgende er syntaksen til at bruge FOR loop-sætning i PL/SQL

FOR loop_counter IN [REVERSE] lower_bound .. higher_boundLOOP sequence_of_statements;END LOOP;

PL/SQL opretter automatisk en lokal variabel loop_counter med en INTEGER-datatype for løkken, så du ikke behøver at erklære den eksplicit. Lowerbound..higherbound er det område, som loopet itererer over. Du skal også have mindst én eksekverbar sætning mellem LOOP og END LOOP nøgleord.

Nu hvor vi ved, hvordan vi kan bruge loop-sætningerne i PL/SQL, lad os tage et kig på exceptionel håndtering i PL/SQL.

Exceptionel håndtering

I PL/SQL behandles enhver form for fejl som en undtagelse. En undtagelse kan behandles som en særlig tilstand, der kan ændre eller ændre udførelsesflowet. I PL/SQL er der to typer undtagelser.

  • Systemundtagelse – Den hæves af PL/SQL-kørselstiden, når den registrerer en fejl.

  • Programmer-defineret undtagelse – Disse undtagelser er defineret af programmøren i en specifik applikation.

Definition af en undtagelse

En undtagelse i PL/SQL skal erklæres, før den kan hæves. Vi kan definere undtagelsen ved at bruge nøgleordet EXCEPTION, som vi har gjort i eksemplet nedenfor.

EXCEPTION_NAME EXCEPTION;

For at rejse en undtagelse bruger vi søgeordet RAISE.

REISE EXCEPTION_NAME;

Så det handlede om PL/SQL, jeg håber, at denne artikel har hjulpet dig med at tilføje værdi til din viden. For mere information om SQL eller databaser, kan du henvise til vores omfattende læseliste her:Databaser Edureka .

Hvis du ønsker at få en struktureret træning i MySQL, så tjek vores MySQL DBA Certification Training som kommer med instruktørledet livetræning og projekterfaring i det virkelige liv. Denne træning vil hjælpe dig med at forstå MySQL i dybden og hjælpe dig med at opnå beherskelse over emnet.

Har du et spørgsmål til os? Nævn det i kommentarsektionen i "PL/SQL Tutorial ” og jeg vender tilbage til dig.


  1. Manglende indekser i MS SQL eller optimering på ingen tid

  2. Adressering af Drop Column Bug i Oracle 18c og 19c

  3. Slut dig til mig for en Microsoft Access med SQL Server Academy-session

  4. Sådan dræber du alle aktive og inaktive oracle-sessioner for brugeren