Oracle PL/SQL Indsæt, opdater, slet og vælg i [Eksempel]

I denne tutorial skal vi lære at bruge SQL i PL/SQL. SQL er den egentlige komponent, der sørger for at hente og opdatere data i databasen, hvorimod PL/SQL er den komponent, der behandler disse data. Yderligere vil vi i denne artikel også diskutere, hvordan man kombinerer SQL i PL/SQL-blokken.

DML-transaktioner i PL/SQL

DML står for Datamanipulation Sprog. Disse udsagn bruges hovedsageligt til at udføre manipulationsaktiviteten. Den omhandler nedenstående operationer.

  • Dataindsættelse
  • Dataopdatering
  • Datasletning
  • Datavalg

I PL/SQL kan vi kun udføre datamanipulation ved at bruge SQL-kommandoer.

Dataindsættelse

I PL/SQL kan vi indsætte dataene i enhver tabel ved hjælp af SQL-kommandoen INSERT INTO. Denne kommando tager tabelnavnet, tabelkolonnen og kolonneværdierne som input og indsætter værdien i basistabellen.

INSERT-kommandoen kan også tage værdierne direkte fra en anden tabel ved at bruge 'SELECT'-sætningen i stedet for at angive værdierne for hver kolonne. Gennem 'SELECT'-sætningen kan vi indsætte lige så mange rækker, som basistabellen indeholder.

Syntaks:

BEGIN
  INSERT INTO <table_name>(<column1 >,<column2>,...<column_n>)
     VALUES(<valuel><value2>,...:<value_n>);
END;
  • Ovenstående syntaks viser kommandoen INSERT INTO. Tabelnavnet og værdierne er obligatoriske felter, hvorimod kolonnenavne ikke er obligatoriske, hvis insert-sætningerne har værdier for alle kolonnerne i tabellen.
  • Søgeordet 'VÆRDI' er obligatorisk, hvis værdierne er angivet separat som vist ovenfor.

Syntaks:

BEGIN
  INSERT INTO <table_name>(<columnl>,<column2>,...,<column_n>)
     SELECT <columnl>,<column2>,.. <column_n> FROM <table_name2>;
END;
  • Ovenstående syntaks viser kommandoen INSERT INTO, der tager værdierne direkte fra ved hjælp af SELECT-kommandoen.
  • Nøgleordet 'VÆRDI' bør ikke være til stede i dette tilfælde, da værdierne ikke er angivet separat.

Dataopdatering

Dataopdatering betyder simpelthen en opdatering af værdien af ​​en hvilken som helst kolonne i tabellen. Dette kan gøres ved at bruge 'UPDATE'-erklæringen. Denne erklæring tager tabelnavnet, kolonnenavnet og værdien som input og opdaterer dataene.

Syntaks:

BEGIN	
  UPDATE <table_name>
  SET <columnl>=<VALUE1>,<column2>=<value2>,<column_n>=<value_n> 
  WHERE <condition that uniquely identifies the record that needs to be update>; 
END;
  • Ovenstående syntaks viser OPDATERING. Nøgleordet 'SET' instruerer den PL/SQL-motor om at opdatere værdien af ​​kolonnen med den angivne værdi.
  • 'WHERE'-klausulen er valgfri. Hvis denne klausul ikke er angivet, vil værdien af ​​den nævnte kolonne i hele tabellen blive opdateret.

Datasletning

Datasletning betyder at slette én fuld post fra databasetabellen. Kommandoen 'DELETE' bruges til dette formål.

Syntaks:

BEGIN
  DELETE
  FROM
  <table_name>
  WHERE <condition that uniquely identifies the record that needs to be update>; 
END;
  • Ovenstående syntaks viser kommandoen DELETE. Nøgleordet 'FROM' er valgfrit og med eller uden 'FROM'-klausul opfører kommandoen sig på samme måde.
  • 'WHERE'-klausulen er valgfri. Hvis denne klausul ikke er givet, vil hele tabellen blive slettet.

Datavalg

Dataprojektion/hentning betyder at hente de nødvendige data fra databasetabellen. Dette kan opnås ved at bruge kommandoen 'SELECT' med 'INTO'-klausulen. 'SELECT'-kommandoen henter værdierne fra databasen, og 'INTO'-klausulen vil tildele disse værdier til den lokale variabel i PL/SQL-blok.

Nedenfor er de punkter, der skal overvejes i 'SELECT'-erklæringen.

  • 'SELECT'-sætning bør kun returnere én post, mens du bruger 'INTO'-sætning, da én variabel kun kan indeholde én værdi. Hvis 'SELECT'-sætningen returnerer mere end én værdi, vil undtagelsen 'TOO_MANY_ROWS' blive hævet.
  • 'SELECT'-sætningen vil tildele værdien til variablen i 'INTO'-sætningen, så den skal have mindst én post fra tabellen for at udfylde værdien. Hvis den ikke fik nogen rekord, så hæves undtagelsen 'NO_DATA_FOUND'.
  • Antallet af kolonner og deres datatype i 'SELECT'-klausulen skal stemme overens med antallet af variabler og deres datatyper i 'INTO'-klausulen.
  • Værdierne hentes og udfyldes i samme rækkefølge som nævnt i erklæringen.
  • 'WHERE'-klausulen er valgfri, der gør det muligt at have flere begrænsninger på de poster, der skal hentes.
  • 'SELECT'-sætningen kan bruges i 'WHERE'-tilstanden i andre DML-sætninger til at definere betingelsernes værdier.
  • 'SELECT'-sætningen ved brug af 'INSERT', 'UPDATE', 'DELETE'-sætninger bør ikke have 'INTO'-sætning, da den ikke vil udfylde nogen variabel i disse tilfælde.

Syntaks:

BEGIN
  SELECT <columnl>,..<column_n> INTO <vanable 1 >,. .<variable_n> 
   FROM <table_name>
   WHERE <condition to fetch the required records>;
END;
  • Ovenstående syntaks viser SELECT-INTO kommandoen. Nøgleordet 'FROM' er obligatorisk, der identificerer tabelnavnet, hvorfra dataene skal hentes.
  • 'WHERE'-klausulen er valgfri. Hvis denne klausul ikke er givet, vil data fra hele tabellen blive hentet.

Eksempel 1: I dette eksempel skal vi se, hvordan man udfører DML-operationer i PL / SQL. Vi vil indsætte nedenstående fire poster i emp-tabellen.

EMP_NAME EMP_NO LØN MANAGER
BBB 1000 25000 AAA
XXX 1001 10000 BBB
yyy 1002 10000 BBB
ZZZ 1003 7500 BBB

Så skal vi opdatere lønnen på 'XXX' til 15000, og vi vil slette medarbejderposten 'ZZZ'. Til sidst vil vi projicere detaljerne om medarbejderen 'XXX'.

Datavalg i PL/SQL

DECLARE
l_emp_name VARCHAR2(250);
l_emp_no NUMBER;
l_salary NUMBER; 
l_manager VARCHAR2(250);
BEGIN	
INSERT INTO emp(emp_name,emp_no,salary,manager) 
VALUES(‘BBB’,1000,25000,’AAA’);
INSERT INTO emp(emp_name,emp_no,salary,manager)
VALUES('XXX',1001,10000,’BBB);
INSERT INTO emp(emp_name,emp_no,salary,managed 
VALUES(‘YYY',1002,10000,'BBB');
INSERT INTO emp(emp_name,emp_no,salary,manager) 
VALUES(‘ZZZ',1003,7500,'BBB'):‭
COMMIT;
Dbms_output.put_line(‘Values Inserted');
UPDATE EMP
SET salary=15000
WHERE emp_name='XXX';
COMMIT;
Dbms_output.put_line(‘Values Updated');
DELETE emp WHERE emp_name='ZZZ';
COMMIT:
Dbms_output.put_line('Values Deleted );
SELECT emp_name,emp_no,salary,manager INTO l_emp_name,l_emp_no,l_salary,l_manager FROM emp WHERE emp_name='XXX';

Dbms output.put line(‘Employee Detail’);
Dbms_output.put_line(‘Employee Name:‘||l_emp_name);
Dbms_output.put_line(‘Employee Number:‘||l_emp_no);
Dbms_output.put_line(‘Employee Salary:‘||l_salary);
Dbms output.put line(‘Emplovee Manager Name:‘||l_manager):
END;
/

Output:

Values Inserted
Values Updated
Values Deleted
Employee Detail 
Employee Name:XXX 
Employee Number:1001 
Employee Salary:15000 
Employee Manager Name:BBB

Kodeforklaring:

  • Kodelinje 2-5: Erklærer variablen.
  • Kodelinje 7-14: Indsættelse af posterne i emp-tabellen.
  • Kodelinje 15: Forpligtelse af indstikstransaktionerne.
  • Kodelinje 17-19: Opdatering af løn for medarbejderen 'XXX' til 15000
  • Kodelinje 20: Begår opdateringstransaktionen.
  • Kodelinje 22: Sletter posten for 'ZZZ'
  • Kodelinje 23: Begår slettetransaktionen.
  • Kodelinje 25-27: Valg af posten 'XXX' og udfyldning i variablen l_emp_name, l_emp_no, l_salary, l_manager.
  • Kodelinje 28-32: Viser den hentede postværdi.