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 naredbe: INSERT, UPDATE, DELETE i SELECT INTO izvršavaju svaki zadatak manipulacije podacima unutar PL/SQL bloka.
  • Unos podataka: INSERT INTO dodaje retke iz eksplicitnih VRIJEDNOSTI ili izravno iz druge tablice pomoću SELECT-a.
  • 🔄 Ažuriranje podataka: Naredba UPDATE s naredbom SET mijenja vrijednosti stupaca, dok opcionalna klauzula WHERE ograničava retke na koje to utječe.
  • 🗑️ Brisanje podataka: Naredba DELETE uklanja odgovarajuće zapise, a izostavljanje klauzule WHERE briše cijelu tablicu.
  • 🎯 Odaberite u: SELECT INTO mora vratiti točno jedan redak, ili Oracle podiže NO_PODATAK_FOUND ili PREVIŠE_REDOVA.
  • 🤖 AI pomoć: AI asistenti poput GitHub Copilota izrađuju DML blokove i označavaju nedostajuće WHERE ili COMMIT.

Oracle PL/SQL Umetni Ažuriraj Izbriši Odaberi U

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.

Oracle PL/SQL blok koji izvodi umetanje, ažuriranje, brisanje i odabir u praznoj tablici

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.

Pitanja i odgovori

Ne. Statički PL/SQL ne može izravno pokrenuti DDL. Izgradite naredbu kao niz znakova i izvršite je s IZVRŠITE ODMAH, koji obrađuje CREATE, ALTER i DROP za vrijeme izvođenja.

SELECT INTO mora vratiti točno jedan redak. Za čitanje više redaka koristite eksplicitnu naredbu pokazivač s petljom FETCH ili SKUPNIM PRIKUPLJANJEM U kolekciju.

DELETE je DML: uklanja odabrane retke pomoću WHERE klauzule i može se vratiti unatrag. TRUNCATE je DDL: odmah briše svaki redak, automatski potvrđuje promjene i ne može se poništiti.

Da. Promjene INSERT, AŽURIRANJE i BRIŠENJE ostaju u vašoj sesiji dok ne POČINITIPL/SQL se ne potvrđuje automatski. Koristite COMMIT za spremanje ili ROLLBACK za odbacivanje.

MERGE izvodi upsert - ažurira retke koji odgovaraju uvjetu spajanja i ubacuje one koji ne odgovaraju - u jednoj naredbi umjesto odvojenih prolaza UPDATE i INSERT.

RETURNING INTO hvata vrijednosti stupaca iz redaka na koje su utjecali INSERT, UPDATE ili DELETE i pohranjuje ih u varijable, izbjegavajući dodatni SELECT za čitanje promijenjenih podataka.

Da. GitHub kopilot izrađuje INSERT, UPDATE, DELETE i SELECT INTO blokove iz kratkog komentara, predlaže vezane varijable i dovršava popise stupaca, iako biste prvo trebali pregledati logiku.

AI asistenti skeniraju DML tražeći nedostajuće WHERE klauzule, nedostajuće COMMIT naredbe i nesigurno spajanje, a zatim predlažu ispravke i objašnjavaju pogreške. Ovaj pregled strojnog učenja hvata rizične promjene prije nego što dođu u produkciju.

Sažmite ovu objavu uz: