Міністерство освіти та науки України НТУУ «КПІ»
Факультет прикладної математики
Кафедра «СКС»
Лабораторна робота № 4
з дисципліни «Організація баз даних»
Виконали:
Курс: 3
Група: КВ-93
Стельмах Георгій Миколайович
Свиридюк Ігор Володимирович
Київ 2011
Постановка задачі
Вивчити відповідні розділи документації за нижченаведеними
пунктами. Привести власні приклади використання даних конструкцій. Звіт
підготувати у вигляді файлу із прикладами.
1. Структура блоку PL/SQL. Опис процедур і функцій. Використання IN,
OUT. Пакети. Вбудовані пакети.
2. Оголошення DEFAULT, %TYPE, %ROWTYPE.
3. Логічні оператори. Обробка порожніх (NULL) значень.
4. Приклади вбудованих функцій.
5. Користувальницькі записи.
6. Умовні ітеративні конструкції.
7. Курсори. Курсори FOR.
8. Колекції в PL/SQL (асоціативні масиви (Associative arrays, index-by tables),
вкладені таблиці (Nested tables), VARRAY)
9. Обробка виняткових ситуацій.
Варіант №4:
Задано таблицю T1(F1 number, F2 varchar2(20)). Написати функцію, яка б :
1) переносила в таблицю Т2 дані з Т1, де F2 порожнє;
2) замінювала б у Т2 порожні значення на текст: ‘порожнє’. Решту значень перенести до колекції та підрахувати їхню кількість.
Початкове створення та заповнення:
1) Структура блоку PL/SQL. Опис процедур і функцій. Використання IN, OUT. Пакети. Вбудовані пакети.
1.1) Структура блоку PL/SQL
DECLARE
/* Declarative section: variables, types, and local subprograms. */
BEGIN
/* Executable section: procedural and SQL statements go here. */
/* This is the only section of the block that is required. */
EXCEPTION
/* Exception handling section: error handling statements go here. */
END;
1.2) Опис процедур і функцій
CREATE TABLE FOOTBALLERS (NAME varchar(20),
AGE INTEGER, CLUB varchar(20));
BEGIN
INSERT INTO FOOTBALLERS values ('Giggs', 35, 'Manchester United');
INSERT INTO FOOTBALLERS values ('Torres', 24, 'Liverpool');
INSERT INTO FOOTBALLERS values ('Tevez', 29, 'Manchester City');
INSERT INTO FOOTBALLERS values ('Fabregas', 23, 'Arsenal');
INSERT INTO FOOTBALLERS values ('Drogba', 30, 'Chelsea');
END;
SELECT * FROM FOOTBALLERS;
NAME AGE CLUB
-------------------- ----------------------- --------------------
Giggs 35 Manchester United
Torres 24 Liverpool
Tevez 29 Manchester City
Fabregas 23 Arsenal
Drogba 30 Chelsea
CREATE OR REPLACE PROCEDURE
ADD_FOOTBALLER (p_name varchar, p_age INTEGER, p_club varchar) AS
BEGIN
INSERT INTO FOOTBALLERS (NAME, AGE, CLUB)
VALUES (p_name, p_age, p_club);
END;
BEGIN
ADD_FOOTBALLER('Etoo', 25, 'Inter');
END;
NAME AGE CLUB
-------------------- ----------------------- --------------------
Giggs 35 Manchester United
Torres 24 Liverpool
Tevez 29 Manchester City
Fabregas 23 Arsenal
Drogba 30 Chelsea
Etoo 25 Inter
CREATE OR REPLACE FUNCTION GET_FOOTBALLER(p_age NUMBER)
RETURN VARCHAR IS VAR_FOOTBALLER VARCHAR(20);
BEGIN
SELECT NAME INTO VAR_FOOTBALLER
FROM FOOTBALLERS WHERE AGE = p_age;
RETURN VAR_FOOTBALLER;
END;
CREATE TABLE RES(name VARCHAR(20))
DECLARE
P_NAME VARCHAR(20);
BEGIN
P_NAME := GET_FOOTBALLER(35);
INSERT INTO RES VALUES(P_NAME);
END;
SELECT * FROM RES;
NAME
--------------------
Giggs
1.3) Використання IN, OUT
CREATE OR REPLACE PROCEDURE PROC(F_AGE OUT NUMBER, F_NAME IN VARCHAR, TMP IN OUT NUMBER) AS
BEGIN
SELECT AGE INTO F_AGE FROM FOOTBALLERS
WHERE NAME = F_NAM...