V tej vadnici je razloženo, kako uporabljati ukaze PL SQL INSERT, UPDATE, DELETE in SELECT s primeri programiranja:
V tem članku bomo nadaljevali z PL / SQL serije . V PL / SQL vrste podatkov, konstante in spremenljivke Vadnice smo podrobno spoznali o vrstah podatkov PL, spremenljivkah, konstantah in literalah PL SQL s pomočjo programov. Tu bomo razpravljali o izjavah PL SQL DML in o tem, kako delujejo.
Raziskovali bomo ukaze PL SQL INSERT, DELETE, UPDATE in SELECT za obdelavo podatkov v tabelah PL / SQL.
Začnimo razumeti izvajanje ukazov INSERT, DELETE, UPDATE in SELECT v tabelah. Skupno se ti imenujejo izjave o jeziku za upravljanje podatkov (DML).
Ukaz PL SQL INSERT
Stavek INSERT INTO se uporablja za vstavljanje podatkov v tabelo. Imenuje se a Jezik za manipulacijo s podatki . Kot vhodne podatke uporablja ime tabele in imena stolpcev ter izvaja vstavljanje vrednosti v tabelo.
Sintaksa:
INSERT INTO <
> VALUES (<>, <>, …..);
Ime tabele in vrednosti, ki jih je treba vstaviti, so obvezni del stavka PL SQL INSERT. Po želji lahko omenimo tudi imena stolpcev, kamor naj se vstavijo vrednosti.
Tabelo EMPLOYEE smo ustvarili s pomočjo spodnjega stavka SQL:
CREATE TABLE EMPLOYEE ( CODE INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (CODE) );
Izvedba kode s PL SQL INSERT:
BEGIN INSERT INTO EMPLOYEE VALUES (1, 'FLEX', 34); INSERT INTO EMPLOYEE VALUES (2, 'HARRY', 35); END
Rezultat zgornje kode mora biti:
SELECT * from EMPLOYEE;
VSTAVITE V IZBOR
VSTAVITE V VSE STOLPCE
INSERT INTO SELECT se uporablja za vstavljanje vrstic v tabelo na podlagi rezultata stavka SELECT. Morda bo treba dobiti vrstico iz tabele in jo vstaviti v drugo tabelo.
Sintaksa:
INSERT INTO <> (col1, col2, col3) SELECT col1, col2, col3 FROM <> WHERE condition;
Za ukaz INSERT INTO SELECT morajo biti podatkovni tipi izvorne in ciljne tabele enaki. V primeru, da potrebujemo kopiranje celotnih vrstic izvorne tabele v ciljno tabelo, lahko pogoj WHERE izpustimo.
S pomočjo spodnjega stavka SQL smo ustvarili še eno tabelo z imenom MANAGER:
CREATE TABLE MANAGER ( CODE INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (CODE) );
Ponovno razmislimo o tabeli ZAPOSLENI.
Izvedba kode z INSERT INTO SELECT .:
BEGIN INSERT INTO MANAGER (CODE, NAME, AGE) SELECT CODE, NAME, AGE FROM EMPLOYEE WHERE CODE = 1; END;
Izhod zgornje kode:
SELECT * from MANAGER;
VSTAVITE DELNE PODATKE
Delne podatke lahko vstavimo tudi v drugo tabelo. Najprej ustvarimo PODROBNOSTI UPRAVNIKA tabela iz tabele EMPLOYEE s spodnjo poizvedbo.
CREATE TABLE MANAGERDETAIL AS SELECT * FROM EMPLOYEE WHERE 1 = 0;
Tukaj, KJE 1 = 0 se nanaša na prvi stolpec tabele ZAPOSLENI, ki je KODA.
Nato bomo uporabili stavek INSERT INTO SELECT za podvajanje podatkov iz tabele EMPLOYEE v tabelo MANAGERDETAIL.
Izvedba kode z INSERT INTO SELECT;
BEGIN INSERT INTO MANAGERDETAIL SELECT CODE, NAME, AGE FROM EMPLOYEE WHERE CODE! = 0 END;
Izhod zgornje kode:
SELECT * from MANAGERDETAIL;
V zgornjem primeru v ukazu INSERT nismo omenili imen stolpcev, saj ima izhod ukaza SELECT vrednosti, ki se ujemajo s stolpci tabele MANAGERDETAIL. Prav tako smo s klavzulo WHERE vključili pogoj.
VSTAVITE DELNE PODATKE IN LITERALNE
V tabelo lahko vstavimo delne podatke in dobesedno vrednost.
Najprej ustvarimo tabelo MANAGERCONTACT s spodnjo poizvedbo:
CREATE TABLE MANAGERCONTACT ( CODE INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (CODE) );
Zdaj pa si spet pomagamo s tabelo EMPLOYEE in poskusimo podvojiti podatke iz tabele EMPLOYEE v tabelo MANAGERCONTACT.
Izvajanje kode z INSERT INTO:
BEGIN INSERT INTO MANAGERCONTACT (CODE, NAME, AGE) SELECT CODE, NAME, 0 FROM EMPLOYEE; END;
Izhod zgornje kode:
SELECT * from MANAGERCONTACT;
V zgornjem primeru smo vrednosti dobili iz tabele EMPLOYEE in vključili tudi 0 dobesednih besed v stavek INSERT, ki je vrednosti stolpca AGE spremenil na 0 v tabeli MANAGERCONTACT.
VSTAVITE VSE
Stavek INSERT ALL se uporablja za dodajanje več vrstic v eno ali več tabel. Imenuje se tudi ukaz z več tabelami in je dve vrsti pogojni in brezpogojni.
# 1) NEPOGOJNO VSTAVITE VSE
Če želite v tabelo vstaviti več vrstic, se uporabi stavek INSERT ALL.
Sintaksa:
INSERT ALL INTO <
> (c1, c2, c3) VALUES (v1, v2, v3) INTO <
> (c1, c2, c3) VALUES (v4, v5, v6) INTO <
> (c1, c2, c3) VALUES (v7, v8, v9)
Tu so c1, c2 in c3 imena stolpcev, v1, v2 in v3 pa vrednosti, ki jih je treba vstaviti. V primeru, da moramo namesto podpoizvedbe uporabiti dobesedno vrednost; uporabiti moramo spodnjo poizvedbo:
SELECT * FROM dual;
Tabelo SOCCERPLAYERS smo ustvarili s pomočjo spodnjega stavka SQL:
CREATE TABLE SOCCERPLAYERS ( PLAYERID INT NOT NULL, NAME VARCHAR (15) NOT NULL, COUNTRY VARCHAR (15), PRIMARY KEY (PLAYERID) );
Izvajanje kode z INSERT ALL:
BEGIN INSERT ALL INTO SOCCERPLAYERS (PLAYERID, NAME, COUNTRY) VALUES (4, 'DANIEL', 'USA') INTO SOCCERPLAYERS (PLAYERID, NAME, COUNTRY) VALUES (8, 'DANNY', 'ITALY') INTO SOCCERPLAYERS (PLAYERID, NAME, COUNTRY) VALUES (7, 'FRANK', 'FRANCE') SELECT 1 FROM dual; END;
Izhod zgornje kode:
SELECT * from SOCCERPLAYERS;
V zgornjem primeru so bile v tabelo z ukazom INSERT ALL vstavljene tri vrstice hkrati.
Za vstavljanje več vrstic v več tabel se uporablja stavek INSERT ALL.
Sintaksa:
INSERT ALL INTO <> (c1, c2, c3) VALUES (v1, v2, v3) INTO <> (c1, c2, c3) VALUES (v4, v5, v6) INTO <> (c1, c2, c3) VALUES (v7, v8, v9) Subquery;
Tu so c1, c2 in c3 imena stolpcev, v1, v2 in v3 pa vrednosti, ki jih je treba vstaviti. Tabela_ime1, ime_tabele2 in ime_tabele3 so imena tabel.
# 2) POGOJNI VSTAVITE VSE
Stavek INSERT ALL lahko v tabele vstavi več kot eno vrstico, odvisno od nekaterih pogojev.
Sintaksa:
INSERT (ALL | FIRST) WHEN cond1 THEN INTO table_name1 <> VALUES <> WHEN cond2 THEN INTO table_name2 <> VALUES <> ELSE INTO table_name3 <> VALUES <> Subquery;
Ključna beseda ALL se uporablja za določitev, da se izvajajo vsi pogoji iz klavzule WHERE. Če je pogoj izpolnjen, se zažene ustrezna klavzula INTO.
Če je uporabljena ključna beseda FIRST, potem za vsako posamezno vrstico, pridobljeno iz podpoizvedbe, Oracle izvede merila v stavku WHEN od zgoraj navzdol. Ko je pogoj izpolnjen, se ustrezna klavzula INTO zažene in preskoči na drugo klavzulo WHEN za to vrstico.
Tabele VEHICLE, CARS, SMALLCARS in LARGECARS smo ustvarili s pomočjo spodnjih stavkov SQL:
CREATE TABLE VEHICLE ( CARID INT NOT NULL, NAME VARCHAR (15) NOT NULL, COLOR VARCHAR (15), PRIMARY KEY (CARID) );
V tabelo VOZILA vstavite spodnje vrednosti:
INSERT INTO VEHICLE VALUES (1, 'AUDI', 'RED'); INSERT INTO VEHICLE VALUES (4, 'BMW', 'WHITE'); INSERT INTO VEHICLE VALUES (7, 'KIA', 'GREEN'); CREATE TABLE CARS ( CARID INT NOT NULL, NAME VARCHAR (15) NOT NULL, COLOR VARCHAR (15), PRIMARY KEY (CARID) ); CREATE TABLE SMALLCARS AS SELECT * FROM CARS; CREATE TABLE LARGECARS AS SELECT * FROM CARS;
Izvajanje kode z INSERT ALL.
BEGIN INSERT ALL WHEN CARID = 1 THEN INTO CARS WHEN CARID = 4 THEN INTO SMALLCARS WHEN CARID = 7 THEN INTO LARGECARS SELECT CARID, NAME, COLOR FROM VEHICLE; END;
Izhod zgornje kode:
SELECT * from CARS;
SELECT * from SMALLCARS;
SELECT * from LARGECARS;
V zgornjem primeru je bila v vsako od treh tabel na podlagi vrednosti CARDID vstavljena ena vrstica.
Stavek INSERT ALL ima določene omejitve:
Uporablja se samo za vstavljanje vrednosti v tabele. Ne deluje s pogledi ali materializiranimi pogledi.
V oddaljene tabele ne more vstavljati vrednosti.
Število stolpcev, ki jih lahko obdeluje ukaz INSERT INTO, ne sme biti večje od 999.
Izraza zbirke tabel ni mogoče uporabiti v ukazu INSERT z več tabelami.
Podpoizvedba INSERT z več tabelami ne more uporabiti zaporedja.
PL SQL ukaz za posodobitev
Stavek UPDATE se uporablja za spreminjanje vrednosti v tabeli. Imenuje se tudi a Jezik za manipulacijo s podatki . Kot vhode uporablja imena tabele, stolpca in vrednosti ter izvaja spremembe vrednosti v tabeli.
Sintaksa:
UPDATE <
> SET <>=<>, <>=<>,… WHERE <>;
Ključna beseda SET se uporablja za spremembo vrednosti stolpca z novo vrednostjo. Neobvezno se uporabi ključna beseda WHERE, če je izpuščena, bo vrednost določenega stolpca v celotni tabeli spremenjena.
POSODOBITE ENO STOLPEC VRSTE
Ponovno razmislimo o tabeli ZAPOSLENI.
Izvajanje kode z UPDATE:
BEGIN UPDATE EMPLOYEE SET NAME = 'HENRY' WHERE CODE=1; END;
Izhod zgornje kode:
SELECT * from EMPLOYEE;
POSODOBITE VEČ STOLPCEV VRSTE
Ponovno razmislimo o tabeli ZAPOSLENI.
Izvajanje kode z UPDATE:
BEGIN UPDATE EMPLOYEE SET NAME = 'COMO', AGE = 30 WHERE CODE=2; END;
Izhod zgornje kode:
SELECT * from EMPLOYEE;
POSODOBITI VEČ VRST
Ponovno razmislimo o tabeli ZAPOSLENI.
Izvajanje kode z UPDATE:
BEGIN UPDATE EMPLOYEE SET AGE = AGE +1; END;
Izhod zgornje kode:
SELECT * from EMPLOYEE;
V zgornjem primeru se je STAROST vseh zaposlenih povečala za 1.
PL SQL ukaz za brisanje
Stavek DELETE se uporablja za odstranitev celotnega zapisa iz tabele. Imenuje se tudi a Jezik za manipulacijo s podatki.
Sintaksa:
DELETE FROM <
> WHERE <>;
Ključna beseda FROM ni obvezna in stavek DELETE bo dal enak rezultat, če je FROM dodan ali ne dodan v poizvedbi. Po želji se uporabi ključna beseda WHERE, če je izpuščena, bo celotna tabela izbrisana.
IZBRIŠI ENO VRSTO IZ MIZE
Ponovno razmislimo o tabeli ZAPOSLENI.
Izvajanje kode z DELETE:
BEGIN DELETE FROM EMPLOYEE WHERE CODE=2; END;
Izhod zgornje kode:
SELECT * from EMPLOYEE;
Brisanje več vrstic iz tabele
Ponovno razmislimo o tabeli MANAGERDETAIL.
Izvajanje kode z DELETE:
BEGIN DELETE FROM MANAGERDETAIL WHERE CODE > 0; END;
Izhod zgornje kode:
SELECT * from MANAGERDETAIL;
IZbriši celotno vrstico iz tabele
Ponovno razmislimo o tabeli VOZILA.
Izvajanje kode z DELETE:
BEGIN DELETE FROM VEHICLE; END;
Izhod zgornje kode:
SELECT * from VEHICLE;
PL SQL Izberite ukaz
Stavek SELECT se uporablja za pridobivanje podatkov iz baze podatkov. Stavek SELECT INTO se uporablja za pridobivanje vrednosti iz baze podatkov in njihovo shranjevanje v lokalne spremenljivke, ki jih uvede PL / SQL.
Če uporabimo samo stavek SELECT, vrne en zapis. Če stavek SELECT pridobi več vrednosti, TOO_MANY_ROWS izjemo vrne PL / SQL. Med uporabo stavka SELECT INTO spremenljivki dodelimo vsaj eno vrednost. Če pa iz baze podatkov ni nobenega zapisa, bo NO_DATA_FOUND vrže se izjema.
Število stolpcev in njihov tip mora biti enako številu spremenljivk in njihovemu tipu v ključni besedi INTO. Vrednosti se pridobijo iz baze podatkov v istem zaporedju, kot je določeno v stavku SELECT.
Ključna beseda WHERE znotraj stavka SELECT ni obvezna in nam omogoča pridobivanje zapisov, ki ustrezajo določenim merilom. Pomembno je omeniti, da poizvedba SELECT z ukazi DELETE, UPDATE in INSERT nima stavka INTO.
Sintaksa:
SELECT <>, <>, ..<> INTO <>, <>, … <> FROM <
> WHERE <>;
PRIDOBI PODATKE IZ VSEH STOLPCEV MIZE
Ponovno razmislimo o tabeli ZAPOSLENI.
Izvajanje kode z SELECT:
BEGIN SELECT * FROM EMPLOYEE WHERE CODE=1; END;
Izhod zgornje kode:
Izvedba kode s stavkom SELECT, ki vrže izjemo:
BEGIN SELECT * FROM EMPLOYEE WHERE CODE=2; END;
Izhod zgornje kode:
Izjema brez podatkov najdemo, ker stavek SELECT ni uspel pridobiti vrstice, ki se ujema z navedenim pogojem, saj v bazi podatkov ni zaposlenega s CODE 2.
DOBITE PODATKE IZ STOLPCA MIZE
Ponovno razmislimo o tabeli ZAPOSLENI.
BEGIN SELECT CODE FROM EMPLOYEE; END;
Izhod zgornje kode:
DOBITE PODATKE IZ VEČ STOLPCEV MIZE
Ponovno razmislimo o tabeli ZAPOSLENI.
BEGIN SELECT CODE, NAME FROM EMPLOYEE; END;
Izhod zgornje kode:
V zgornjem primeru sta bila v stavku SELECT dodana dva stolpca CODE in NAME.
Pogosta vprašanja in odgovori
V # 1) Kaj je INSERT, UPDATE in DELETE v SQL?
Odgovor: INSERT, UPDATE in DELETE so ukazi v SQL, ki pomagajo pri delovanju in posodabljanju podatkov. Stavek INSERT vstavi vrstice v tabelo. Stavek DELETE izbriše vrstice iz tabele, stavek UPDATE pa posodobi vrednosti v vrsticah tabele.
V # 2) Ali lahko vstavimo, posodobimo in izbrišemo v pogledu v SQL?
Odgovor: Da, v pogledu SQL lahko vstavimo, posodobimo in izbrišemo. Če se je pogled združil med tabelami, lahko izvajamo samo dejanja INSERT in UPDATE, vendar ne moremo izvesti DELETE. Stavek DROP se uporablja za brisanje pogleda.
V # 3) Ali je INSERT DDL ali DML?
Odgovor: INSERT je DML ali jezik za upravljanje podatkov). Drugi stavki DML vključujejo UPDATE, DELETE itd. Stavek DDL lahko ustvarja tabele, shemo in bazo podatkov.
V # 4) Ali lahko uporabimo JOIN IN poizvedbo za brisanje?
Odgovor: Da, za brisanje vrstic iz tabele lahko uporabimo stavek INNER JOIN v ukazu DELETE.
V # 5) Kakšna je razlika med ukazom za obrezovanje in brisanje?
Odgovor: TRUNCATE je izjava DDL, DELETE pa DML. Ukaz TRUNCATE lahko odstrani celotno tabelo. Ne ohranja celovitosti tabele. Stavek DELETE lahko izbriše samo določene podatke v tabeli. Vključuje lahko tudi pogoje za izbris.
V # 6) Kaj so DML, DCL in DDL?
Odgovor: Stavki SQL so vrst - DML, DCL in DML.
Jezik za definicijo podatkov ali DDL vključuje ukaze, kot so ALTER, DROP, CREATE, RENAME, TRUNCATE in COMMENT. Jezik za manipulacijo s podatki ali DML vključuje ukaze, kot so INSERT, DELETE, MERGE, UPDATE, CALL, LOCK TABLE in EXPLAIN PLAN.
Jezik za nadzor podatkov ali DCL vključuje ukaze, kot sta GRANT in REVOKE.
V # 7) Ali je obrezovanje hitrejše od padca?
Odgovor: Da, delovanje TRUNCATE je hitrejše kot DROP. Ukaz TRUNCATE izbriše samo podatke iz tabele. Ukaz DROP izbriše strukturo tabele in podatke iz tabele.
Zaključek
V tej vadnici smo podrobno obravnavali nekatere osnovne koncepte ukazov PL SQL, ki so bistveni za razvijanje znanja o njem. Obravnavali smo naslednje teme: