Oracle PL/SQL Вмъкване, актуализиране, изтриване и избиране в [Пример]
В този урок ще научим как да използваме SQL в PL/SQL. SQL е действителният компонент, който се грижи за извличането и актуализирането на данни в базата данни, докато PL/SQL е компонентът, който обработва тези данни. Освен това в тази статия ще обсъдим и как да комбинираме SQL в PL/SQL блока.
DML транзакции в PL/SQL
DML означава Език за управление на данни. Тези твърдения се използват главно за извършване на манипулационна дейност. Той се занимава с операциите по-долу.
- Вмъкване на данни
- Актуализация на данните
- Изтриване на данни
- Избор на данни
В PL/SQL можем да извършваме манипулиране на данни само с помощта на SQL команди.
Вмъкване на данни
В PL/SQL можем да вмъкнем данните във всяка таблица с помощта на SQL командата INSERT INTO. Тази команда ще вземе името на таблицата, колоната на таблицата и стойностите на колоните като вход и ще вмъкне стойността в основната таблица.
Командата INSERT може също да вземе стойностите директно от друга таблица, като използва израза 'SELECT', вместо да дава стойностите за всяка колона. Чрез оператора 'SELECT' можем да вмъкнем толкова редове, колкото съдържа основната таблица.
Синтаксис:
BEGIN
INSERT INTO <table_name>(<column1 >,<column2>,...<column_n>)
VALUES(<valuel><value2>,...:<value_n>);
END;
- Горният синтаксис показва командата INSERT INTO. Името и стойностите на таблицата са задължителни полета, докато имената на колони не са задължителни, ако изразите за вмъкване имат стойности за цялата колона на таблицата.
- Ключовата дума 'VALUES' е задължителна, ако стойностите са дадени отделно, както е показано по-горе.
Синтаксис:
BEGIN
INSERT INTO <table_name>(<columnl>,<column2>,...,<column_n>)
SELECT <columnl>,<column2>,.. <column_n> FROM <table_name2>;
END;
- Горният синтаксис показва командата INSERT INTO, която взема стойностите директно от с помощта на командата SELECT.
- Ключовата дума „VALUES“ не трябва да присъства в този случай, тъй като стойностите не се дават отделно.
Актуализация на данните
Актуализацията на данните просто означава актуализация на стойността на която и да е колона в таблицата. Това може да стане с помощта на израза „АКТУАЛИЗИРАНЕ“. Този оператор приема името на таблицата, името на колоната и стойността като вход и актуализира данните.
Синтаксис:
BEGIN UPDATE <table_name> SET <columnl>=<VALUE1>,<column2>=<value2>,<column_n>=<value_n> WHERE <condition that uniquely identifies the record that needs to be update>; END;
- Горният синтаксис показва АКТУАЛИЗАЦИЯТА. Ключовата дума 'SET' инструктира тази PL/SQL машина да актуализира стойността на колоната с дадената стойност.
- Клаузата 'WHERE' не е задължителна. Ако тази клауза не е дадена, тогава стойността на споменатата колона в цялата таблица ще бъде актуализирана.
Изтриване на данни
Изтриването на данни означава изтриване на един пълен запис от таблицата на базата данни. За тази цел се използва командата 'DELETE'.
Синтаксис:
BEGIN DELETE FROM <table_name> WHERE <condition that uniquely identifies the record that needs to be update>; END;
- Горният синтаксис показва командата DELETE. Ключовата дума „ОТ“ не е задължителна и със или без клауза „ОТ“ командата се държи по същия начин.
- Клаузата 'WHERE' не е задължителна. Ако тази клауза не е дадена, тогава цялата таблица ще бъде изтрита.
Избор на данни
Проекция/извличане на данни означава извличане на необходимите данни от таблицата на базата данни. Това може да се постигне чрез използване на командата 'SELECT' с клауза 'INTO'. Командата 'SELECT' ще извлече стойностите от базата данни, а клаузата 'INTO' ще присвои тези стойности на локалната променлива на PL/SQL блок.
По-долу са точките, които трябва да се вземат предвид в оператора „ИЗБЕРИ“.
- Операторът „SELECT“ трябва да връща само един запис, докато се използва клауза „INTO“, тъй като една променлива може да съдържа само една стойност. Ако командата 'SELECT' върне повече от една стойност, ще бъде предизвикано изключение от 'TOO_MANY_ROWS'.
- Операторът 'SELECT' ще присвои стойността на променливата в клаузата 'INTO', така че трябва да получи поне един запис от таблицата, за да попълни стойността. Ако не получи никакъв запис, тогава се повдига изключението „NO_DATA_FOUND“.
- Броят на колоните и техният тип данни в клаузата „SELECT“ трябва да съвпада с броя на променливите и техните типове данни в клаузата „INTO“.
- Стойностите се извличат и попълват в същия ред, както е посочено в израза.
- Клаузата „WHERE“ не е задължителна, което позволява да има повече ограничения върху записите, които ще бъдат извлечени.
- Операторът 'SELECT' може да се използва в условието 'WHERE' на други DML оператори за определяне на стойностите на условията.
- Операторът „SELECT“, когато използвате оператори „INSERT“, „UPDATE“, „DELETE“, не трябва да има клауза „INTO“, тъй като в тези случаи няма да попълни променлива.
Синтаксис:
BEGIN SELECT <columnl>,..<column_n> INTO <vanable 1 >,. .<variable_n> FROM <table_name> WHERE <condition to fetch the required records>; END;
- Горният синтаксис показва командата SELECT-INTO. Ключовата дума „FROM“ е задължителна, която идентифицира името на таблицата, от която трябва да бъдат извлечени данните.
- Клаузата 'WHERE' не е задължителна. Ако тази клауза не е дадена, тогава данните от цялата таблица ще бъдат извлечени.
Пример 1: В този пример ще видим как да извършваме DML операции в PL / SQL. Ще вмъкнем четирите записа по-долу в таблицата emp.
| EMP_NAME | EMP_NO | ЗАПЛАТА | МЕНИДЖЪР |
|---|---|---|---|
| Съобщи | 1000 | 25000 | AAA |
| XXX | 1001 | 10000 | Съобщи |
| ГГГ | 1002 | 10000 | Съобщи |
| ЗЗЗ | 1003 | 7500 | Съобщи |
След това ще актуализираме заплатата на „XXX“ до 15000 и ще изтрием записа на служител „ZZZ“. Накрая ще проектираме детайлите на служителя „XXX“.
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,managed
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(‘Emplovee Manager Name:‘||l_manager):
END;
/
Изход:
Values Inserted Values Updated Values Deleted Employee Detail Employee Name:XXX Employee Number:1001 Employee Salary:15000 Employee Manager Name:BBB
Обяснение на кода:
- Кодов ред 2-5: Деклариране на променливата.
- Кодов ред 7-14: Вмъкване на записите в emp таблица.
- Кодов ред 15: Извършване на вмъкнати транзакции.
- Кодов ред 17-19: Актуализиране на заплатата на служителя „XXX“ до 15000
- Кодов ред 20: Извършване на транзакцията за актуализиране.
- Кодов ред 22: Изтриване на записа на „ZZZ“
- Кодов ред 23: Извършване на транзакцията за изтриване.
- Кодов ред 25-27: Избиране на запис на „XXX“ и попълване в променливата l_emp_name, l_emp_no, l_salary, l_manager.
- Кодов ред 28-32: Показване на стойността на извлечените записи.

