Oracle PL/SQL umetanje, ažuriranje, brisanje i odabir u [primjer]
⚡ Pametni sažetak
SQL naredbe unutra Oracle PL/SQL obrađuje svaki zadatak manipulacije podacima, omogućujući bloku izravno umetanje, ažuriranje, brisanje i odabir redaka. Naredbe INSERT, UPDATE, DELETE i SELECT INTO premještaju i dohvaćaju podatke unutar baze podataka.

DML transakcije u PL/SQL
DML je kratica za jezik za manipulaciju podacima, skupinu jezika SQL naredbe koje mijenjaju podatke pohranjene u tablici. Unutar PL/SQL blok, ove naredbe obavljaju manipulaciju, dok PL/SQL osigurava okolnu logiku. DML se bavi operacijama u nastavku.
- Umetanje podataka
- Ažuriranje podataka
- Brisanje podataka
- Odabir podataka
U PL/SQL-u, manipulacija podacima se vrši samo putem SQL naredbi.
Umetanje podataka
U PL/SQL-u, retci se dodaju u tablicu SQL naredbom INSERT INTO. Ova naredba uzima naziv tablice, ciljne stupce i vrijednosti stupaca kao ulaz, a zatim umeće vrijednost u osnovnu tablicu.
Naredba INSERT također može izravno preuzeti vrijednosti iz druge tablice pomoću naredbe SELECT umjesto davanja vrijednosti za svaki stupac. Pomoću naredbe SELECT može se odjednom umetnuti onoliko redaka koliko izvorna tablica sadrži.
Sintaksa:
BEGIN INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>) VALUES(<value1>,<value2>,...,<value_n>); END;
Gornja sintaksa prikazuje naredbu INSERT INTO. Naziv tablice i vrijednosti su obavezna polja, dok su nazivi stupaca opcionalni kada naredba INSERT daje vrijednosti za svaki stupac tablice. Ključna riječ VALUES je obavezna kada su vrijednosti dane zasebno, kao što je prikazano gore.
Sintaksa:
BEGIN INSERT INTO <table_name>(<column1>,<column2>,...,<column_n>) SELECT <column1>,<column2>,...,<column_n> FROM <table_name2>; END;
Ovaj drugi oblik INSERT INTO preuzima vrijednosti izravno iz pomoću naredbe SELECT. Ključna riječ VALUES ne smije biti ovdje prisutna jer se vrijednosti ne navode zasebno.
Ažuriranje podataka
Ažuriranje podataka znači promjenu vrijednosti stupca u postojećem retku. To se radi naredbom UPDATE, koja uzima naziv tablice, naziv stupca i novu vrijednost kao ulaz te ažurira podatke.
Sintaksa:
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;
Gornja sintaksa prikazuje naredbu UPDATE. Ključna riječ SET upućuje PL/SQL engine da ažurira stupac s danom vrijednošću. Naredba WHERE je opcionalna; ako nije navedena, vrijednost spomenutog stupca ažurira se u cijeloj tablici.
Brisanje podataka
Brisanje podataka znači uklanjanje jednog cijelog zapisa iz tablice baze podataka. U tu svrhu koristi se naredba DELETE.
Sintaksa:
BEGIN DELETE FROM <table_name> WHERE <condition that uniquely identifies the record that needs to be deleted>; END;
Gornja sintaksa prikazuje naredbu DELETE. Ključna riječ FROM je opcionalna i sa ili bez klauzule FROM naredba se ponaša na isti način. Klauzula WHERE je opcionalna; ako nije navedena, cijela tablica će se isprazniti.
Odabir podataka
Projekcija podataka ili dohvaćanje znači dohvaćanje potrebnih podataka iz tablice baze podataka. To se postiže naredbom SELECT zajedno s klauzulom INTO. Naredba SELECT dohvaća vrijednosti iz baze podataka, a klauzula INTO dodjeljuje te vrijednosti lokalnim varijablama PL/SQL bloka.
Prilikom korištenja SELECT naredbe s INTO potrebno je uzeti u obzir sljedeće točke:
- Naredba SELECT trebala bi vratiti samo jedan zapis korištenjem klauzule INTO, jer jedna varijabla može sadržavati samo jednu vrijednost. Ako naredba SELECT vrati više od jednog retka, Iznimka TOO_MANY_ROWS je podignut.
- Naredba SELECT dodjeljuje vrijednost varijabli u INTO klauzuli, pa je potreban barem jedan zapis za popunjavanje vrijednosti. Ako ne pronađe nijedan zapis, generira se iznimka NO_DATA_FOUND.
- Broj stupaca i njihovi tipovi podataka u SELECT klauzuli trebaju odgovarati broju varijabli i njihovim tipovima podataka u INTO klauzuli.
- Vrijednosti se dohvaćaju i popunjavaju istim redoslijedom kako je navedeno u izjavi.
- Klauzula WHERE je opcionalna i omogućuje vam postavljanje dodatnih ograničenja na zapise koji se dohvaćaju.
- Naredba SELECT može se koristiti u uvjetu WHERE drugih DML naredbi za definiranje vrijednosti uvjeta.
- Naredba SELECT korištena unutar naredbi INSERT, UPDATE ili DELETE ne bi trebala imati klauzulu INTO jer u tim slučajevima ne popunjava nijednu varijablu.
Sintaksa:
BEGIN SELECT <column1>,...,<column_n> INTO <variable1>,...,<variable_n> FROM <table_name> WHERE <condition to fetch the required records>; END;
Gornja sintaksa prikazuje naredbu SELECT-INTO. Ključna riječ FROM je obavezna i identificira tablicu iz koje treba dohvatiti podatke. Klauzula WHERE je opcionalna; ako nije navedena, tada će se dohvatiti podaci iz cijele tablice.
Primjer 1: U ovom primjeru vidjet ćemo kako izvoditi DML operacije u PL/SQL-u. Umetnut ćemo četiri zapisa u emp tablicu.
| EMP_NAME | EMP_NO | PLAĆA | MANAGER |
|---|---|---|---|
| BBB | 1000 | 25000 | AAA |
| XXX | 1001 | 10000 | BBB |
| GGG | 1002 | 10000 | BBB |
| ZZZ | 1003 | 7500 | BBB |
Zatim ćemo ažurirati plaću 'XXX' na 15000, izbrisati zapis zaposlenika 'ZZZ' i na kraju projicirati detalje zaposlenika 'XXX'.
Snimka zaslona u nastavku prikazuje cijeli PL/SQL blok korišten za ovaj primjer.
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; /
Izlaz:
Values Inserted Values Updated Values Deleted Employee Detail Employee Name:XXX Employee Number:1001 Employee Salary:15000 Employee Manager Name:BBB
Code Objašnjenje:
- Code redak 2-5: Deklariranje varijabli.
- Code redak 7-14: Umetanje zapisa u emp tablicu.
- Code redak 15: Potvrda transakcija umetanja.
- Code redak 17-19: Ažuriranje plaće zaposlenika 'XXX' na 15000.
- Code redak 20: Potvrda transakcije ažuriranja.
- Code redak 22: Brisanje zapisa 'ZZZ'.
- Code redak 23: Potvrda transakcije brisanja.
- Code redak 25: Odabir zapisa 'XXX' i popunjavanje varijabli l_emp_name, l_emp_no, l_salary i l_manager.
- Code redak 26-30: Prikaz dohvaćenih vrijednosti zapisa.

