Oracle PL/SQL Indsæt, opdater, slet og vælg i [Eksempel]
⚡ Smart opsummering
SQL-sætninger indeni Oracle PL/SQL håndterer alle datamanipulationsopgaver og lader en blok indsætte, opdatere, slette og vælge rækker direkte. Kommandoerne INSERT, UPDATE, DELETE og SELECT INTO flytter og henter data i databasen.

DML-transaktioner i PL/SQL
DML står for Data Manipulation Language, gruppen af SQL kommandoer, der ændrer dataene gemt i en tabel. Inden for en PL/SQL-blok, disse kommandoer udfører manipulationsarbejdet, mens PL/SQL leverer den omgivende logik. DML håndterer nedenstående operationer.
- Dataindsættelse
- Dataopdatering
- Datasletning
- Datavalg
I PL/SQL udføres datamanipulation kun via SQL-kommandoer.
Dataindsættelse
I PL/SQL tilføjes rækker til en tabel med SQL-kommandoen INSERT INTO. Denne kommando tager tabelnavnet, målkolonnerne og kolonneværdierne som input og indsætter derefter værdien i basistabellen.
INSERT-kommandoen kan også tage værdierne direkte fra en anden tabel ved hjælp af en SELECT-sætning i stedet for at angive værdierne for hver kolonne. Med en SELECT-sætning kan der indsættes lige så mange rækker på én gang, som kildetabellen indeholder.
Syntaks:
BEGIN INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>) VALUES(<value1>,<value2>,...,<value_n>); END;
Ovenstående syntaks viser INSERT INTO-kommandoen. Tabelnavnet og værdierne er obligatoriske felter, hvorimod kolonnenavne er valgfrie, når INSERT-sætningen angiver værdier for hver kolonne i tabellen. Nøgleordet VALUES er obligatorisk, når værdierne angives separat, som vist ovenfor.
Syntaks:
BEGIN INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>) SELECT <column1>,<column2>,...,<column_n> FROM <table_name2>; END;
Denne anden form for INSERT INTO tager værdierne direkte fra ved hjælp af SELECT-kommandoen. Nøgleordet VALUES må ikke være til stede her, da værdierne ikke angives separat.
Dataopdatering
Dataopdatering betyder at ændre værdien af en kolonne i en eksisterende række. Dette gøres med UPDATE-sætningen, som tager tabelnavnet, kolonnenavnet og den nye værdi som input og opdaterer dataene.
Syntaks:
BEGIN UPDATE <table_name> SET <column1>=<value1>,<column2>=<value2>,<column_n>=<value_n> WHERE <condition that uniquely identifies the record that needs to be updated>; END;
Ovenstående syntaks viser UPDATE-sætningen. Nøgleordet SET instruerer PL/SQL-motoren i at opdatere kolonnen med den angivne værdi. WHERE-klausulen er valgfri; hvis den ikke er angivet, opdateres værdien af den nævnte kolonne i hele tabellen.
Datasletning
Datasletning betyder at fjerne en hel post fra databasetabellen. DELETE-kommandoen bruges til dette formål.
Syntaks:
BEGIN DELETE FROM <table_name> WHERE <condition that uniquely identifies the record that needs to be deleted>; END;
Ovenstående syntaks viser DELETE-kommandoen. Nøgleordet FROM er valgfrit, og med eller uden FROM-klausulen opfører kommandoen sig på samme måde. WHERE-klausulen er valgfri; hvis den ikke er angivet, vil hele tabellen blive tømt.
Datavalg
Dataprojektion, eller hentning, betyder at hente de nødvendige data fra databasetabellen. Dette opnås med SELECT-kommandoen sammen med INTO-klausulen. SELECT-kommandoen henter værdierne fra databasen, og INTO-klausulen tildeler disse værdier til de lokale variabler i PL/SQL-blokken.
Følgende punkter skal overvejes, når du bruger en SELECT-sætning med INTO:
- En SELECT-sætning bør kun returnere én post, når INTO-klausulen bruges, fordi én variabel kun kan indeholde én værdi. Hvis SELECT returnerer mere end én række, TOO_MANY_ROWS undtagelse er rejst.
- SELECT-sætningen tildeler værdien til variablen i INTO-klausulen, så den skal bruge mindst én post for at udfylde værdien. Hvis den ikke finder nogen post, genereres undtagelsen NO_DATA_FOUND.
- Antallet af kolonner og deres datatyper 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 og giver dig mulighed for at sætte flere begrænsninger på de poster, der hentes.
- En SELECT-sætning kan bruges i WHERE-betingelsen i andre DML-sætninger til at definere værdierne for betingelserne.
- En SELECT-sætning, der bruges i INSERT-, UPDATE- eller DELETE-sætninger, bør ikke have en INTO-klausul, da den i disse tilfælde ikke udfylder nogen variable.
Syntaks:
BEGIN SELECT <column1>,...,<column_n> INTO <variable1>,...,<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 og identificerer den tabel, hvorfra dataene skal hentes. WHERE-klausulen er valgfri; hvis den ikke er angivet, hentes data fra hele tabellen.
Eksempel 1: I dette eksempel vil vi se, hvordan man udfører DML-operationer i PL/SQL. Vi indsætter de fire poster nedenfor 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 |
Derefter opdaterer vi lønnen for 'XXX' til 15000, sletter medarbejderposten 'ZZZ' og projicerer endelig detaljerne for medarbejderen 'XXX'.
Skærmbilledet nedenfor viser den komplette PL/SQL-blok, der blev brugt i dette eksempel.
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,manager) 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('Employee 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
Code Forklaring:
- Code linje 2-5: Deklarering af variablerne.
- Code linje 7-14: Indsættelse af poster i emp-tabellen.
- Code linje 15: Bekræfter indsættelsestransaktionerne.
- Code linje 17-19: Opdaterer medarbejderens løn 'XXX' til 15000.
- Code linje 20: Udfører opdateringstransaktionen.
- Code linje 22: Sletter posten 'ZZZ'.
- Code linje 23: Udfører slettetransaktionen.
- Code linje 25: Valg af posten 'XXX' og udfyldning af variablerne l_emp_name, l_emp_no, l_salary og l_manager.
- Code linje 26-30: Viser de hentede postværdier.

