sql >> Databasteknik >  >> RDS >> Database

Handledning för PL/SQL:Allt du behöver veta om PL/SQL

PL/SQL är ett procedurspråk som övervinner de brister som Structured Query Language möter. Det är en förlängning av SQL och vi kan till och med använda SQL-frågor utan krångel i någon PL/SQL-applikation eller -program. I denna PL/SQL-handledning kommer vi att gå igenom de grundläggande begreppen för PL/SQL i detalj. Följande ämnen behandlas i den här artikeln.

  • Vad är PL/SQL?
    • Funktioner
    • PL/SQL vs SQL
  • Blockera strukturer i PL/SQL
  • PL/SQL-variabler
  • Funktion i PL/SQL
  • PL/SQL-procedur
  • Inkapslat block
  • IF-uttalande
  • CASE Statement
  • Loop Statement
    • While Loop Statement
    • För Loop Statement
  • Exceptionell hantering

Vad är PL/SQL?

Det står för procedural language extension till det strukturerade frågespråket. Oracle skapade PL/SQL som utökar vissa begränsningar av SQL för att tillhandahålla en mer omfattande lösning för att bygga verksamhetskritiska applikationer som körs på Oracle-databasen.

Funktioner

  • PL/SQL tillhandahåller funktionaliteten hos ett procedurspråk såsom beslutsfattande, iteration, etc.

  • Med ett enda kommando kan PL/SQL köra ett antal frågor.

  • Vi kan också återanvända PL/SQL-enheter som funktioner, triggers, procedurer etc som lagras i databasen efter skapandet.

  • PL/SQL har också ett undantagshanteringsblock som hanterar undantagen i PL/SQL.

  • Omfattande felkontroll är också möjligt med PL/SQL

  • Applikationerna skrivna i PL/SQL är portabla till annan hårdvara och andra operativsystem förutsatt att Oracle måste fungera.

PL/SQL vs SQL

SQL PL/SQL
SQL är en enda fråga som används för att utföra DDL- och DML-operationer PL/SQL är ett block med koder som används för att definiera ett helt program eller procedur/funktion, etc.
Det definierar inte riktigt hur saker måste göras, snarare definierar det vad som behöver göras PL/SQL definierar hur saker måste göras
Den kör ett enda uttalande Den kör ett block med satser på en gång.
SQL används främst för att manipulera data PL/SQL, å andra sidan, används för att skapa applikationer
Den kan inte innehålla PL/SQL-kod Eftersom det är ett SQL-tillägg kan det innehålla SQL-kod i den

Blockera strukturer i PL/SQL

PL/SQL organiserar vanligtvis koden i block. Kodblocket utan namn är känt som ett anonymt block. Det är känt som det anonyma blocket eftersom det inte sparas i Oracle-databasen. Låt oss ta en titt på ett anonymt block i PL/SQL.

[DECLARE] deklarationssatser;[BEGIN] exekveringssatser; [EXCEPTION] undantagssatser;END;/

När vi tittar på diagrammet ovan kan vi se att blockstrukturen är uppdelad i fyra delar, dvs deklaration, början, undantag och slut. Låt oss försöka förstå hur blockstrukturen fungerar i PL/SQL. Av alla dessa sektioner är exekveringssektionen obligatorisk och resten är alla valfria.

  • DEKLARE nyckelordet används för att för deklarationssektionen används för att deklarera datatyper och strukturer som variabler, funktioner etc.

  • BÖRJAN nyckelordet används för exekveringssektionen. Det är obligatoriskt och innehåller alla satser som behöver köras. Det här blocket är där affärslogiken definieras, vi kan använda både procedur- eller SQL-satser i detta block.

  • UNDANTAG nyckelordet används för undantagsavsnittet. Den innehåller alla undantagssatser.

  • SLUT nyckelord markerar slutet på blocket och snedstrecket '/' talar om för verktyget som du använder (Oracle Database Tool) för att exekvera PL/SQL-blocket.

Här är ett enkelt exempel för att visa hur vi kan använda PL/SQL-koden.

BEGIN NULL;END;/

Nu när vi vet hur blockstrukturen fungerar i PL/SQL, låt oss förstå de olika aspekterna av PL/SQL som att deklarera, namnge och tilldela värden till variablerna.

PL/SQL-variabler

Variabeln i PL/SQL är i grunden ett namn som varierar eller en tillfällig lagringsplats som stöder en viss datatyp. Låt oss ta en titt på hur vi kan använda variablerna i ett PL/SQL-program.

Variabelnamnregler

PL/SQL följer följande regler för namngivning av variabler.

  • Variabeln får inte vara mer än 31 tecken

  • Namnet på variabeln ska börja med ett ASCII-tecken. Eftersom PL/SQL är skiftlägeskänsligt kommer en stor bokstav och en liten bokstav att vara olika variabler.

  • Efter det första tecknet måste det finnas ett specialtecken ($,_ ) eller valfritt nummer.

Namnkonventioner

Använd följande namnkonventioner som listas nedan för att använda variablerna.

Prefix Datatyp
v_ VARCHAR2
n_ NUMMER
t_ TABELL
r_ RAD
d_ DATE
b_ BOLESKA

Deklaration

Låt oss försöka förstå hur variabeldeklaration görs i PL/SQL

Deklarationen innehåller variabelnamnet följt av datatypen och avgränsad med semikolon. Följande är ett exempel för att visa hur du kan deklarera en variabel i PL/SQL.

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

Du kan också lägga till längden på datatypen som vi har gjort i exemplet ovan.

Ankare

Ankaret hänvisar i grunden till användningen av nyckelordet %TYPE för att deklarera en variabel med datatypen som är associerad med en kolumns datatyp för en viss kolumn i en tabell.

Ta en titt på ett exempel för att förstå detta. Anta att vi har ett bord ANSTÄLLDA, vi kan använda ankarna på följande sätt.

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

Uppdrag

Variabeltilldelning är ganska lätt, vi kan använda tilldelningsoperatorn för att tilldela värden till en variabel. Följande exempel visar hur vi kan tilldela värden till en variabel.

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

Initiering

Vi kan också initiera ett värde för variabeln i deklarationssektionen. Följande exempel visar hur vi kan initiera värden till en variabel.

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

Nu när vi vet hur vi kan arbeta med variablerna, låt oss försöka förstå hur vi kommer att använda funktioner i PL/SQL.

Funktion i PL/SQL

En funktion i PL/SQL är i grunden ett namngivet block som returnerar ett värde. Det är också känt som en subrutin eller ett underprogram, följande syntax visar hur vi kan använda funktioner i PL/SQL.

SKAPA [ELLER ERSÄTT] FUNKTION 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-satser returnerar return_data_type; EXCEPTION END; /

Först och främst måste du ange ett funktionsnamn efter nyckelordet. Funktionsnamnet måste börja med ett verb. En funktion kan ha inga, en eller flera parametrar som vi anger i parametrar. Vi måste ange datatypen för varje parameter explicit, och sedan kommer läget som kan något av följande.

  • IN – IN-parametern är en skrivskyddad parameter.

  • UT – Det är en skrivparameter

  • IN UT – IN OUT-parametern är både läs-skriv-parameter.

Här är ett enkelt exempel för att visa hur vi använder funktioner i PL/SQL.

SKAPA ELLER ERSÄTT FUNKTION try_parse( iv_number I VARCHAR2) RETURN NUMBER ISBEGIN RETURN to_number(iv_number); UNDANTAG NÄR andra SEDAN ÅTERGÅR NULL;END;

Anropar en funktion

Låt oss försöka kalla funktionen som vi har gjort i ett anonymt block i följande exempel.

STÄLL IN SERVEROUTPUT PÅ STORLEK 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 anropa funktionen i en SELECT-sats också. Nu när vi vet hur vi kan använda funktioner i PL/SQL, låt oss försöka förstå hur vi arbetar med procedurer i PL/SQL.

PL/SQL-procedur

En procedur är i grunden ett block som gör en specifik uppgift. Med hjälp av en procedur kan vi slå in eller kapsla in komplex affärslogik och återanvända dem i både applikations- och databasskikt.

Låt oss ta en titt på ett enkelt exempel för att förstå hur proceduren fungerar i PL/SQL

SKAPA ELLER ERSÄTT PROCEDUR adjust_salary( in_employee_id IN EMPLOYEES.EMPLOYEE_ID%TYPE, in_percent IN NUMBER) ISBEGIN -- uppdatera anställdas lön UPPDATERA anställda SÄTT lön =lön + lön * in_percent / 100 WHERE anställd_id =in_em; 

I exemplet ovan har vi två parametrar, proceduren justerar lönen med en given procentsats och nyckelordet UPDATE uppdaterar värdet i löneinformationen.

Procedurrubrik

Avsnittet före nyckelordet IS kallas procedurerhuvudet. Följande är några tips som man måste vara bekant med när man arbetar med procedurer.

  • schema – Det är det valfria namnet på schemat som proceduren tillhör.

  • namn – Namnet på proceduren som ska börja med ett verb.

  • parametrar – Det är den valfria listan med parametrar.

  • AUTHID – Det avgör om proceduren kommer att köras med den nuvarande användarens eller den ursprungliga ägarens behörighet.

Procedurtext

Allt som kommer efter IS-nyckelordet kallas proceduren. Vi har deklarations-, undantags- och verkställighetsförklaringarna i procedurorganet. Till skillnad från funktionen används nyckelordet RETURN i en procedur för att stoppa exekveringen och återföra kontrollen till den som ringer.

Anropa en procedur

Låt oss se hur vi kan anropa en procedur i PL/SQL.

 EXEC procedure_name(param1,param2…paramN);

Vi kan anropa procedurerna utan parametrar genom att bara använda EXEC-nyckelordet och procedurens namn. Nu när vi vet hur vi kan arbeta med procedurer, låt oss försöka förstå hur kapslade block används i PL/SQL.

Inkapslat block

Ett kapslat block är inget annat än en kombination av ett eller flera PL/SQL-block för att få bättre kontroll över körningen och exceptionell hantering av programmet.

Här är ett enkelt exempel på ett kapslat block.

STÄLL IN SERVEROUTPUT PÅ STORLEK 1000000;DECLARE n_emp_id EMPLOYEES.EMPLOYEE_ID%TYPE :=&emp_id1;BEGIN DECLARE n_emp_id anställda.employee_id%TYPE :=&emp_id2; v_name anställda.first_name%TYPE; BÖRJA VÄLJ FÖRSTA_namn INTO v_namn FRÅN anställda WHERE anställd_id =n_emp_id; DBMS_OUTPUT.PUT_LINE('Förnamn på anställd ' || n_emp_id || ' är ' || v_name); UNDANTAG NÄR ingen_data_hittades DÅ DBMS_OUTPUT.PUT_LINE('Anställd ' || n_emp_id || ' hittades inte'); END;END;/

Det yttre PL/SQL-blocket i exemplet ovan är känt som det överordnade blocket eller omslutande blocket, det inre blocket är å andra sidan känt som det underordnade blocket eller slutna block.

Det är ingen bra idé att använda variablerna med samma namn i båda blocken eftersom under exekveringen kommer den underordnade blockvariabeln att åsidosätta den överordnade blockvariabeln. Det händer eftersom PL/SQL ger variabeln första prioritet i sitt eget block.

Blockera etikett

Vi kan lösa det här problemet med blocketiketten som hjälper oss att göra referenser till variabler inuti block med hjälp av en etikett.

Här är ett enkelt exempel för att visa hur vi kan använda en blocketikett.

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

Att använda en blocketikett hjälper till att förbättra läsbarheten för koden, få bättre kontroll och göra referenser till blocken. Nu när vi vet hur vi kan arbeta med kapslade block, låt oss försöka förstå hur IF STATEMENT fungerar i PL/SQL.

IF-uttalande

PL/SQL har tre IF-UTTALANDE

  • OM-DÅ – Det är det enklaste IF STATEMENT om villkoret är sant kommer satserna att köras, om villkoret är falskt gör det ingenting.

  • OM-DÅ-ANNARS – I denna läggs ELSE-satsen till för en alternativ sekvens av satser.

  • IF-THEN-ELSEIF – Det tillåter oss att utföra flera testförhållanden i en sekvens.

OM-DÅ-syntax

IF condition THEN sequence_of_statements;END IF;

OM-DÅ-ANS-syntax

IF condition THEN sequence_of_if_statements;ELSE sequence_of_else_statements;END IF;

OM-DÅ-ELSEIF-syntax

IF condition1 THEN sequence_of_statements1ELSIF condition2 THEN sequence_of_statements2ELSE sequence_of_statements3END IF;

Nu när vi är klara med IF STATEMENT låt oss titta på CASE-satsen i PL/SQL.

CASE Statement

CASE-satsen hjälper i grunden vid exekvering av en sekvens av satser baserade på en väljare. En väljare, i det här fallet, kan vara vad som helst, det kan vara en variabel, funktion eller ett enkelt uttryck. Här är ett enkelt exempel för att visa syntaxen för CASE-satsen i PL/SQL.

[<>]FALL [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 [etikett_namn];

I ovanstående syntax, efter nyckelordet CASE kommer väljaren. PL/SQL utvärderar väljaren endast en gång för att avgöra vilken sats som behöver köras.

Följt av väljaren är nyckelordet WHEN. Om uttrycket uppfyller väljaren exekveras motsvarande sats efter THEN nyckelord.

Nu när vi vet hur vi kan använda en CASE-sats, låt oss försöka förstå hur vi kommer att använda loop-satserna i PL/SQL.

Loop Statement

En loop-sats i PL/SQL är en iterativ sats som låter dig exekvera en sekvens av satser flera gånger. Här är ett enkelt exempel för att visa syntaxen för en loop-sats i PL/SQL.

LOOP sequence_of_statements;END LOOP;

Det måste finnas minst en körbar sats mellan nyckelordet LOOP och END LOOP.

Slinga med EXIT-uttalande

EXIT och EXIT när uttalanden tillåter dig att lämna loopen. EXIT WHEN-satsen avslutar loopen villkorligt medan EXIT avslutar exekveringen ovillkorligt.

LOOP ... EXIT WHEN condition;END LOOP;

Slingetikett

En loopetikett används för att kvalificera namnet på loopräknarevariabeln när den används i en kapslad loop. Följande är syntaxen för en loopetikett.

<

Nu när vi vet hur vi kan använda loop-satser, låt oss ta en titt på while loop-satser för bättre förståelse.

While Loop Statement

Vi kan använda WHILE loop-satsen när antalet körningar inte är definierade förrän körningen startar. Följande syntax används för en WHILE loop-sats i PL/SQL.

WHILE conditionLOOP sequence_of_statements;END LOOP;

Villkoret i syntaxen är ett booleskt värde eller uttryck som utvärderas vara antingen TRUE, FALSE eller NULL. Om villkoret är TRUE kommer satserna att köras, om det är FALSE stoppas exekveringen och kontrollen går till nästa körbara sats.

Nu när vi vet hur vi kan använda en WHILE loop-sats, låt oss ta en titt på FOR-loop-satsen.

För Loop Statement

En FOR loop-sats i PL/SQL tillåter oss att exekvera en sekvens av satser ett bestämt antal gånger. Följande är syntaxen för att använda FOR loop-satsen i PL/SQL

FÖR loop_counter IN [REVERSE] lower_bound .. higher_boundLOOP sequence_of_statements;END LOOP;

PL/SQL skapar en lokal variabel loop_counter automatiskt med en INTEGER-datatyp för slingan så att du inte behöver deklarera den explicit. Den nedre gränsen..höggräns är intervallet över vilket slingan itererar. Du måste också ha minst en körbar sats mellan nyckelorden LOOP och END LOOP.

Nu när vi vet hur vi kan använda loop-satserna i PL/SQL, låt oss ta en titt på exceptionell hantering i PL/SQL.

Exceptionell hantering

I PL/SQL behandlas alla typer av fel som ett undantag. Ett undantag kan behandlas som ett speciellt villkor som kan ändra eller ändra exekveringsflödet. I PL/SQL finns det två typer av undantag.

  • Systemundantag – Den höjs av PL/SQL-körtiden när den upptäcker ett fel.

  • Programmerdefinierat undantag – Dessa undantag definieras av programmeraren i en specifik applikation.

Definiera ett undantag

Ett undantag i PL/SQL måste deklareras innan det kan höjas. Vi kan definiera undantaget med nyckelordet EXCEPTION som vi har gjort i exemplet nedan.

EXCEPTION_NAME EXCEPTION;

För att göra ett undantag använder vi nyckelordet RAISE.

ÖKA EXCEPTION_NAME;

Så det handlade om PL/SQL, jag hoppas att den här artikeln har hjälpt dig att tillföra värde till din kunskap. För mer information om SQL eller databaser, kan du hänvisa till vår omfattande läslista här:Databaser Edureka .

Om du vill få en strukturerad utbildning i MySQL, kolla in vårMySQL DBA-certifieringsutbildning som kommer med instruktörsledd liveutbildning och verklig projektupplevelse. Den här utbildningen hjälper dig att förstå MySQL på djupet och hjälper dig att behärska ämnet.

Har du en fråga till oss? Vänligen nämn det i kommentarsavsnittet i "PL/SQL Tutorial ” så återkommer jag till dig.


  1. Importera psycopg2-biblioteket har inte laddats:libssl.1.0.0.dylib

  2. PostgreSQL:kodningsproblem på Windows när du använder kommandoradsverktyget psql

  3. Hur man får nya användare per dag i MySQL

  4. Hur man skapar pivottabell i PostgreSQL