Содержание

Слайд 2

Рассматриваемые вопросы Какие команды SQL могут непосредственно указываться в исполняемом блоке

Рассматриваемые вопросы

Какие команды SQL могут непосредственно указываться в исполняемом блоке PL/SQL
Использование

команд языка манипулирования данными (DML) в PL/SQL
Использование предложения INTO для запоминания значений, возвращаемых командой SQL
Отличия между неявными и явными курсорами
Использование атрибутов курсоров SQL
Слайд 3

Команды SQL в PL/SQL Выборка строки данных из базы данных с

Команды SQL в PL/SQL

Выборка строки данных из базы данных с помощью

команды SELECT. Должна быть возвращена только одна строка.
Внесение изменений в строки таблиц базы данных с помощью команд DML.
Управление транзакциями с помощью команд COMMIT, ROLLBACK и SAVEPOINT.
Слайд 4

Команды SELECT в PL/SQL Выборка данных из базы данных производится с

Команды SELECT в PL/SQL

Выборка данных из базы данных производится с помощью

команды SELECT
Синтаксис:

SELECT список_выборки
INTO {имя_переменной[, имя_переменной]...
| имя_записи}
FROM таблица
[WHERE условие];

Слайд 5

Команды SELECT в PL/SQL Предложение INTO обязательно. Запросы должны возвращать одну

Команды SELECT в PL/SQL

Предложение INTO обязательно.
Запросы должны возвращать одну и только

одну строку.
Пример :

SET SERVEROUTPUT ON
DECLARE
fname VARCHAR2(25);
BEGIN
SELECT first_name INTO fname
FROM employees WHERE employee_id=200;
DBMS_OUTPUT.PUT_LINE(' First Name is : '||fname);
END;
/

Слайд 6

Выборка данных в PL/SQL Выборка даты найма и оклада для определенного

Выборка данных в PL/SQL

Выборка даты найма и оклада для определенного
служащего.
Пример:

DECLARE

emp_hiredate employees.hire_date%TYPE;
emp_salary employees.salary%TYPE;
BEGIN
SELECT hire_date, salary
INTO emp_hiredate, emp_salary
FROM employees
WHERE employee_id = 100;
END;
/
Слайд 7

SET SERVEROUTPUT ON DECLARE sum_sal NUMBER(10,2); deptno NUMBER NOT NULL :=

SET SERVEROUTPUT ON
DECLARE
sum_sal NUMBER(10,2);
deptno NUMBER NOT NULL

:= 60;
BEGIN
SELECT SUM(salary) -- group function
INTO sum_sal FROM employees
WHERE department_id = deptno;
DBMS_OUTPUT.PUT_LINE ('The sum of salary is ' || sum_sal);
END;
/

Выборка данных в PL/SQL

Найти сумму окладов всех служащих для заданного отдела.
Пример:

Слайд 8

Правила присвоения имен DECLARE hire_date employees.hire_date%TYPE; sysdate hire_date%TYPE; employee_id employees.employee_id%TYPE :=

Правила присвоения имен

DECLARE
hire_date employees.hire_date%TYPE;
sysdate hire_date%TYPE;
employee_id employees.employee_id%TYPE := 176;


BEGIN
SELECT hire_date, sysdate
INTO hire_date, sysdate
FROM employees
WHERE employee_id = employee_id;
END;
/
Слайд 9

Правила присвоения имен Во избежание неоднозначности предложения WHERE придерживайтесь выработанной системы

Правила присвоения имен

Во избежание неоднозначности предложения WHERE придерживайтесь выработанной системы присвоения

имен.
Избегайте использования имен столбцов базы в качестве идентификаторов.
Синтаксические ошибки могут возникнуть вследствие того, что PL/SQL сначала ищет столбец с данным именем в таблице.
Имена локальных переменных и формальных параметров имеют приоритет над именами таблиц базы данных.
Имена столбцов имеют приоритет над именами локальных переменных.
Слайд 10

Манипулирование данными в PL/SQL Внесение изменений в таблицы базы данных с

Манипулирование данными в PL/SQL

Внесение изменений в таблицы базы данных с
помощью команд

DML:
INSERT
UPDATE
DELETE
MERGE

INSERT

UPDATE

DELETE

MERGE

Слайд 11

Вставка данных Пример добавления информации о новом служащем в таблицу EMPLOYEES:

Вставка данных

Пример добавления информации о новом служащем в таблицу EMPLOYEES:

BEGIN
INSERT

INTO employees
(employee_id, first_name, last_name, email,
hire_date, job_id, salary)
VALUES(employees_seq.NEXTVAL, 'Ruth', 'Cores',
'RCORES',sysdate, 'AD_ASST', 4000);
END;
/
Слайд 12

Обновление данных Пример увеличения оклада всех служащих из таблицы EMPLOYEES, должность

Обновление данных

Пример увеличения оклада всех служащих из таблицы EMPLOYEES, должность которых

– клерк на складе:

DECLARE
sal_increase employees.salary%TYPE := 800;
BEGIN
UPDATE employees
SET salary = salary + sal_increase
WHERE job_id = 'ST_CLERK';
END;
/

Слайд 13

Удаление данных Пример удаления информации о служащих 10 отдела из таблицы

Удаление данных

Пример удаления информации о служащих 10 отдела из таблицы EMPLOYEES:

DECLARE

deptno employees.department_id%TYPE := 10;
BEGIN
DELETE FROM employees
WHERE department_id = deptno;
END;
/
Слайд 14

Слияние строк Вставка или изменение строк в таблице COPY_EMP для установления

Слияние строк

Вставка или изменение строк в таблице COPY_EMP для установления соответствия

с таблицей EMPLOYEES.

DECLARE
empno employees.employee_id%TYPE := 100;
BEGIN
MERGE INTO copy_emp c
USING employees e
ON (e.employee_id = empno)
WHEN MATCHED THEN
UPDATE SET
c.first_name = e.first_name,
c.last_name = e.last_name,
c.email = e.email,
. . .
WHEN NOT MATCHED THEN
INSERT VALUES(e.employee_id, e.first_name, e.last_name,
. . .,e.department_id);
END;
/

Слайд 15

Курсор SQL Курсор – это указатель на приватную область памяти, выделенную

Курсор SQL

Курсор – это указатель на приватную область памяти, выделенную сервером

Oracle.
Имеется два типа курсоров:
Неявные курсоры: создаются и внутренне сопровождаются сервером Oracle для обработки команд SQL
Явные курсоры: явно объявляются программистом
Слайд 16

Атрибуты курсора SQL, используемые неявными курсорами Атрибуты курсора SQL позволяют пользователю

Атрибуты курсора SQL, используемые неявными курсорами

Атрибуты курсора SQL позволяют пользователю проверить

результат выполнения своей команды SQL.
Слайд 17

Атрибуты курсора SQL, используемые неявными курсорами Пример удаления строк с конкретным

Атрибуты курсора SQL, используемые неявными курсорами

Пример удаления строк с конкретным номером

служащего из таблицы EMPLOYEES и вывод количества удаленных строк.

VARIABLE rows_deleted VARCHAR2(30)
DECLARE
empno employees.employee_id%TYPE := 176;
BEGIN
DELETE FROM employees
WHERE employee_id = empno;
:rows_deleted := (SQL%ROWCOUNT ||
' row deleted.');
END;
/
PRINT rows_deleted

Слайд 18

Итоги Использование в блоке PL/SQL команд DML. Использование в командах SELECT

Итоги

Использование в блоке PL/SQL команд DML.
Использование в командах SELECT предложения INTO,

обязательно указываемого в PL/SQL.
Отличия между явными и неявными курсорами.
Использование атрибутов курсора SQL для определения результатов выполнения команды SQL.