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'.
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.