Како се користи изјава ПЛ СКЛ уметање, ажурирање, брисање и одабир
how use pl sql insert
Овај водич објашњава како се користе ПЛ СКЛ наредбе ИНСЕРТ, УПДАТЕ, ДЕЛЕТЕ и СЕЛЕЦТ са примерима програмирања:
У овом чланку ћемо наставити са ПЛ / СКЛ серија . У ПЛ / СКЛ типови података, константе и променљиве из водича, детаљно смо научили о ПЛ СКЛ типовима података, променљивим, константама и литералима уз помоћ примера програмирања. Овде ћемо разговарати о ПЛ СКЛ ДМЛ изразима и како они функционишу.
Почнимо да разумемо имплементацију наредби ИНСЕРТ, ДЕЛЕТЕ, УПДАТЕ и СЕЛЕЦТ на табелама. Колективно се они називају изразима за управљање подацима (ДМЛ).
ПЛ СКЛ наредба ИНСЕРТ
Израз ИНСЕРТ ИНТО користи се за уметање података у табелу. Зове се а Језик за манипулацију подацима . Као улазе користи име табеле и имена и вредности колона и врши уметање вредности у табелу.
Синтакса:
INSERT INTO <
> VALUES (<>, <>, …..);
Име табеле и вредности које треба уметнути су обавезни део ПЛ СКЛ ИНСЕРТ израза. По жељи можемо споменути и називе колона у које треба убацити вредности.
Створили смо табелу ЕМПЛОИЕЕ уз помоћ СКЛ наредбе дане у наставку:
CREATE TABLE EMPLOYEE ( CODE INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (CODE) );
Имплементација кода са ПЛ СКЛ ИНСЕРТ:
BEGIN INSERT INTO EMPLOYEE VALUES (1, 'FLEX', 34); INSERT INTO EMPLOYEE VALUES (2, 'HARRY', 35); END
Резултат горњег кода треба да буде:
SELECT * from EMPLOYEE;
ИНСЕРТ ИНТО СЕЛЕЦТ
УМЕСТИ У СВЕ КОЛОНЕ
ИНСЕРТ ИНТО СЕЛЕЦТ се користи за уметање редова у табелу делујући на резултат наредбе СЕЛЕЦТ. Можда ће бити потребно добити ред из табеле и уметнути га у другу табелу.
Синтакса:
INSERT INTO <> (col1, col2, col3) SELECT col1, col2, col3 FROM <> WHERE condition;
Команда ИНСЕРТ ИНТО СЕЛЕЦТ треба да буду исти типови података изворне и циљне табеле. У случају да нам је потребно копирање читавих редова изворне табеле у циљну табелу, можемо изоставити услов ВХЕРЕ.
Креирали смо још једну табелу под називом МАНАГЕР уз помоћ СКЛ наредбе дане у наставку:
CREATE TABLE MANAGER ( CODE INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (CODE) );
Размотримо поново табелу ЗАПОСЛЕНИ.
Имплементација кода са ИНСЕРТ ИНТО СЕЛЕЦТ .:
BEGIN INSERT INTO MANAGER (CODE, NAME, AGE) SELECT CODE, NAME, AGE FROM EMPLOYEE WHERE CODE = 1; END;
Излаз горњег кода:
SELECT * from MANAGER;
УМЕТНИТЕ ДЕЛИМИЧНЕ ПОДАТКЕ
Делимичне податке такође можемо уметнути у другу табелу. Прво направимо ДЕТАЉИ МЕНАЏЕРА табела из табеле ЗАПОСЛЕНИ са упитом у наставку.
CREATE TABLE MANAGERDETAIL AS SELECT * FROM EMPLOYEE WHERE 1 = 0;
Ево, ГДЕ 1 = 0 односи се на прву колону табеле ЗАПОСЛЕНИ која је КОД.
Даље ћемо користити наредбу ИНСЕРТ ИНТО СЕЛЕЦТ за дуплирање података из табеле ЕМПЛОИЕЕ у табелу МАНАГЕРДЕТАИЛ.
Имплементација кода са ИНСЕРТ ИНТО СЕЛЕЦТ;
BEGIN INSERT INTO MANAGERDETAIL SELECT CODE, NAME, AGE FROM EMPLOYEE WHERE CODE! = 0 END;
Излаз горњег кода:
SELECT * from MANAGERDETAIL;
У горњем примеру нисмо поменули имена ступаца у наредби ИНСЕРТ, јер излаз наредбе СЕЛЕЦТ има вредности које се подударају са колонама табеле МАНАГЕРДЕТАИЛ. Такође, уз клаузулу ВХЕРЕ укључили смо и услов.
УМЕСТАЈТЕ ДЕЛИМИЧНЕ ПОДАТКЕ И ЛИТЕРАЛНЕ
У табелу можемо уметнути делимичне податке и дословну вредност.
Прво креирајмо табелу МАНАГЕРЦОНТАЦТ са упитом у наставку:
CREATE TABLE MANAGERCONTACT ( CODE INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (CODE) );
Сада поново узмимо помоћ табеле ЕМПЛОИЕЕ и покушајмо да дуплирамо податке из табеле ЕМПЛОИЕЕ у табелу МАНАГЕРЦОНТАЦТ.
Имплементација кода са ИНСЕРТ ИНТО:
BEGIN INSERT INTO MANAGERCONTACT (CODE, NAME, AGE) SELECT CODE, NAME, 0 FROM EMPLOYEE; END;
Излаз горњег кода:
SELECT * from MANAGERCONTACT;
У горњем примеру смо добили вредности из табеле ЕМПЛОИЕЕ и такође смо укључили 0 литерала у израз ИНСЕРТ који је променио вредности колоне АГЕ на 0 у табели МАНАГЕРЦОНТАЦТ.
ИНСЕРТ АЛЛ
Израз ИНСЕРТ АЛЛ користи се за додавање више редака у једну или више табела. Такође се назива наредба са више табела и има два типа условна и безусловна.
# 1) БЕЗБОЈНО УМЕТНИ СВЕ
За уметање више од једног реда у табелу користи се израз ИНСЕРТ АЛЛ.
Синтакса:
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)
Овде су ц1, ц2 и ц3 имена колона, а в1, в2 и в3 су вредности које треба уметнути. У случају да морамо да користимо литералну вредност уместо подупита; морамо користити упит у наставку:
SELECT * FROM dual;
Створили смо табелу СОЦЦЕРПЛАИЕРС уз помоћ СКЛ наредбе дане у наставку:
CREATE TABLE SOCCERPLAYERS ( PLAYERID INT NOT NULL, NAME VARCHAR (15) NOT NULL, COUNTRY VARCHAR (15), PRIMARY KEY (PLAYERID) );
Имплементација кода са ИНСЕРТ АЛЛ:
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;
Излаз горњег кода:
SELECT * from SOCCERPLAYERS;
У горњем примеру, три реда су уметнута одједном у табелу са наредбом ИНСЕРТ АЛЛ.
За уметање више од једног реда у више табела користи се израз ИНСЕРТ АЛЛ.
Синтакса:
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;
Овде су ц1, ц2 и ц3 имена колона, а в1, в2 и в3 су вредности које треба уметнути. Табле_наме1, табле_наме2 и табле_наме3 су имена табеле.
# 2) УСЛОВНО УМЕТНИ СВЕ
Израз ИНСЕРТ АЛЛ може у табеле убацити више редака, у зависности од неких услова.
Синтакса:
INSERT (ALL | FIRST) WHEN cond1 THEN INTO table_name1 <> VALUES <> WHEN cond2 THEN INTO table_name2 <> VALUES <> ELSE INTO table_name3 <> VALUES <> Subquery;
Кључна реч АЛЛ користи се за одређивање извршења свих услова под клаузулом ВХЕРЕ. Ако је услов задовољен, покренула би се одговарајућа ИНТО клаузула.
Ако се користи кључна реч ФИРСТ, онда за сваки појединачни ред добијен из подупита, Орацле извршава критеријуме у клаузули ВХЕН од врха до дна. Једном када је услов задовољен, одговарајућа клаузула ИНТО ће се покренути и прескочити на другу клаузулу ВХЕН за тај ред.
Створили смо ВЕХИЦЛЕ, ЦАРС, СМАЛЛЦАРС и ЛАРГЕЦАРС табеле уз помоћ СКЛ наредби даних у наставку:
CREATE TABLE VEHICLE ( CARID INT NOT NULL, NAME VARCHAR (15) NOT NULL, COLOR VARCHAR (15), PRIMARY KEY (CARID) );
У табелу ВОЗИЛА убаците следеће вредности:
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;
Имплементација кода са ИНСЕРТ АЛЛ.
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;
Излаз горњег кода:
SELECT * from CARS;
SELECT * from SMALLCARS;
SELECT * from LARGECARS;
У горњем примеру, у сваку од три табеле је уметнут по један ред на основу вредности ЦАРДИД.
Постоје одређена ограничења са изјавом ИНСЕРТ АЛЛ:
Користи се само за уметање вредности у табеле. Не ради са погледима или материјализованим погледима.
Није способан за уметање вредности у удаљене табеле.
Број ступаца које наредба ИНСЕРТ ИНТО може да обрађује не би требало да буде већи од 999.
Израз колекције табела не може се користити у наредби ИНСЕРТ за више табела.
ИНСЕРТ подупит са више табела не може да користи секвенцу.
ПЛ СКЛ наредба за ажурирање
Израз УПДАТЕ користи се за модификовање вредности у табели. Такође се назива а Језик за манипулацију подацима . Као улазе користи имена табеле, колоне и вредности и врши модификовање вредности на табели.
Синтакса:
UPDATE <
> SET <>=<>, <>=<>,… WHERE <>;
Кључна реч СЕТ користи се за промену вредности колоне новом вредношћу. Опционално, користи се кључна реч ВХЕРЕ, ако је изостављена, тада ће се променити вредност наведеног ступца у целој табели.
АЖУРИРАЈ ЈЕДНУ КОЛОНУ РЕДА
Размотримо поново табелу ЗАПОСЛЕНИ.
Имплементација кода са УПДАТЕ:
BEGIN UPDATE EMPLOYEE SET NAME = 'HENRY' WHERE CODE=1; END;
BEGIN UPDATE EMPLOYEE SET NAME = 'COMO', AGE = 30 WHERE CODE=2; END;
Излаз горњег кода:
SELECT * from EMPLOYEE;
АЖУРИРАЈ ВИШЕ РЕДОВА
Размотримо поново табелу ЗАПОСЛЕНИ.
Имплементација кода са УПДАТЕ:
BEGIN UPDATE EMPLOYEE SET AGE = AGE +1; END;
Излаз горњег кода:
SELECT * from EMPLOYEE;
У горњем примеру, СТАРОСТ свих запослених повећала се за 1.
ПЛ СКЛ наредба за брисање
Израз ДЕЛЕТЕ користи се за уклањање целог записа из табеле. Такође се назива а Језик за манипулацију подацима.
Синтакса:
DELETE FROM <
> WHERE <>;
Кључна реч ФРОМ није обавезна и наредба ДЕЛЕТЕ ће дати исти резултат ако се ФРОМ дода или не дода у упит. По жељи се користи кључна реч ВХЕРЕ, ако се изостави, комплетна табела ће бити избрисана.
ИЗБРИШИ ЈЕДНОСТРЕДНИ РЕД СА СТОЛА
Размотримо поново табелу ЗАПОСЛЕНИ.
Имплементација кода са ДЕЛЕТЕ:
BEGIN DELETE FROM EMPLOYEE WHERE CODE=2; END;
Излаз горњег кода:
SELECT * from EMPLOYEE;
Брисање вишеструких редова са стола
Размотримо поново табелу МАНАГЕРДЕТАИЛ.
Имплементација кода са ДЕЛЕТЕ:
BEGIN DELETE FROM MANAGERDETAIL WHERE CODE > 0; END;
Излаз горњег кода:
SELECT * from MANAGERDETAIL;
ОБРИШИ ЦИЈЕЛЕ РЕДОВЕ ИЗ СТОЛА
Размотримо поново табелу ВОЗИЛА.
Имплементација кода са ДЕЛЕТЕ:
BEGIN DELETE FROM VEHICLE; END;
Излаз горњег кода:
SELECT * from VEHICLE;
ПЛ СКЛ команда за одабир
Израз СЕЛЕЦТ користи се за преузимање података из базе података. Израз СЕЛЕЦТ ИНТО користи се за преузимање вриједности из базе података и њихово складиштење у локалне варијабле које уводи ПЛ / СКЛ.
Ако користимо само наредбу СЕЛЕЦТ, она враћа један запис. У случају да СЕЛЕЦТ израз преузима више вредности, ТОО_МАНИ_РОВС изузетак баца ПЛ / СКЛ. Док користимо наредбу СЕЛЕЦТ ИНТО, променљивој додељујемо најмање једну вредност. Међутим, ако се из базе података не преузима ниједан запис, НИЈЕ ПРОНАЂЕН НИЈЕДАН ПОДАЦИ изузетак се баца.
Број колона и њихов тип треба да буде једнак броју променљивих и њиховом типу у кључној речи ИНТО. Вредности се добијају из базе података у истом низу као што је дефинисано у наредби СЕЛЕЦТ.
Кључна реч ВХЕРЕ унутар наредбе СЕЛЕЦТ није обавезна и омогућава нам да добијемо записе који испуњавају одређене критеријуме. Важно је напоменути да упит СЕЛЕЦТ са наредбама ДЕЛЕТЕ, УПДАТЕ и ИНСЕРТ нема клаузулу ИНТО.
Синтакса:
SELECT <>, <>, ..<> INTO <>, <>, … <> FROM <
> WHERE <>;
ПРЕУЗИМАЊЕ ПОДАТАКА ИЗ СВИХ КОЛОНА ТАБЕЛЕ
Размотримо поново табелу ЗАПОСЛЕНИ.
Имплементација кода са СЕЛЕЦТ:
BEGIN SELECT * FROM EMPLOYEE WHERE CODE=1; END;
Излаз горњег кода:
Имплементација кода са СЕЛЕЦТ наредбом која доноси изузетак:
BEGIN SELECT * FROM EMPLOYEE WHERE CODE=2; END;
Излаз горњег кода:
Изузетак без пронађених података баца се јер израз СЕЛЕЦТ није успео да добије ред који се подудара са наведеним условом јер у бази података нема запосленог са ЦОДЕ 2.
ПРЕУЗИМАЊЕ ПОДАТАКА ИЗ КОЛОНЕ ТАБЕЛЕ
Размотримо поново табелу ЗАПОСЛЕНИ.
BEGIN SELECT CODE FROM EMPLOYEE; END;
Излаз горњег кода:
ПРЕУЗИМАЊЕ ПОДАТАКА ИЗ ВИШЕ КОЛОНА СТОЛА
Размотримо поново табелу ЗАПОСЛЕНИ.
BEGIN SELECT CODE, NAME FROM EMPLOYEE; END;
Излаз горњег кода:
У горњем примеру, у наредбу СЕЛЕЦТ додане су две колоне ЦОДЕ и НАМЕ.
Често постављана питања и одговори
П # 1) Шта је ИНСЕРТ, УПДАТЕ и ДЕЛЕТЕ у СКЛ-у?
Одговор: ИНСЕРТ, УПДАТЕ и ДЕЛЕТЕ су наредбе у СКЛ-у које помажу у раду и ажурирању података. Израз ИНСЕРТ убацује редове у табелу. Израз ДЕЛЕТЕ брише редове из табеле, а израз УПДАТЕ ажурира вредности у редовима табеле.
П # 2) Да ли можемо уметнути, надоградити и избрисати приказ у СКЛ-у?
Одговор: Да, можемо уметнути, ажурирати и избрисати у погледу у СКЛ-у. Ако се приказ спојио између табела, можемо извршити само радње ИНСЕРТ и УПДАТЕ, али не можемо извршити операцију ДЕЛЕТЕ. Изјава ДРОП се користи за брисање приказа.
Одговор: ИНСЕРТ је ДМЛ или језик за манипулацију подацима). Остале ДМЛ изјаве укључују УПДАТЕ, ДЕЛЕТЕ итд. ДДЛ израз је способан да креира табеле, шеме и базе података.
П # 4) Можемо ли користити ЈОИН ИН упит за брисање?
Одговор: Да, можемо користити наредбу ИННЕР ЈОИН у наредби ДЕЛЕТЕ за брисање редова из табеле.
П # 5) Која је разлика између наредбе за скраћивање и брисање?
Одговор: ТРУНЦАТЕ је ДДЛ израз док је ДЕЛЕТЕ ДМЛ. Команда ТРУНЦАТЕ може уклонити комплетну табелу. Не задржава интегритет табеле. Израз ДЕЛЕТЕ може избрисати само одређене податке из табеле. Такође може садржати услове за брисање.
П # 6) Шта су ДМЛ, ДЦЛ и ДДЛ?
Одговор: СКЛ изрази су типови - ДМЛ, ДЦЛ и ДМЛ.
Језик дефиниције података или ДДЛ укључује наредбе попут АЛТЕР, ДРОП, ЦРЕАТЕ, РЕНАМЕ, ТРУНЦАТЕ и ЦОММЕНТ. Језик за манипулацију подацима или ДМЛ укључује наредбе попут ИНСЕРТ, ДЕЛЕТЕ, МЕРГЕ, УПДАТЕ, ЦАЛЛ, ЛОЦК ТАБЛЕ и ЕКСПЛАИН ПЛАН.
Језик за контролу података или ДЦЛ укључује наредбе попут ГРАНТ и РЕВОКЕ.
П # 7) Да ли је одсецање брже од пада?
Одговор: Да, ТРУНЦАТЕ операција је бржа од ДРОП-а. Команда ТРУНЦАТЕ само брише податке из табеле. Команда ДРОП брише структуру табеле и податке из табеле.
Закључак
У овом упутству детаљно смо размотрили неке основне концепте ПЛ СКЛ наредби који су од суштинског значаја за развијање знања о њему. Обрадили смо следеће теме наведене у наставку: