Министерство транспорта Российской Федерации
Департамент Водного Транспорта
НГАВТ
Кафедра ИС
ОТЧЕТ
По лабораторной работе №3
Выполнил:
студенты группы ИТ-42
Проверил:
Ю.
Новосибирск 2007
1. Цели и задачи
Цель: Создать набор хранимых процедур, в соответствии с тематикой разрабатываемой базы.
Задачи:
I. Научиться создавать хранимые процедуры.
II. Реализовать на языке SQL сценарий(-ии), для создания хранимых процедур.
III. Научиться использовать локальные и глобальные (например, ROW_COUNT) переменные.
IV. Научиться использовать встроенные функции:
a). COUNT
b). MAX
c). SUBSTRING
d). EXTRACT
V. Научиться использовать управляющие структуры:
a). WHILE … DO
b). IF…THEN…ELSE
.
2. Введение
СУБД позволяют структурировать, систематизировать и организовывать данные для их хранения и обработки. Именно системы управления базами данных являются основой любой информационной модели.
Для облегчения и автоматизации работы с БД используются процедуры и встроены функции.
3. Ход работы
3.1 SQL сценарий, для создания хранимой процедуры
SET TERM ^ ;
CREATE PROCEDURE NEW_PROCEDURE (
sel_name varchar(20))
returns (
ret_pay decimal(15,2))
as
declare variable all_pay decimal(15,2);
begin
SELECT SUM(PAY) FROM company
WHERE COMPANYNAME =:sel_name INTO :all_pay;
IF (row_count=0) THEN all_pay=0;
IF (:all_pay>5000) THEN ret_pay =all_pay-(all_pay*20)/100;
ELSE ret_pay=all_pay-(all_pay*5)/100;
suspend;
end^
SET TERM ; ^
GRANT SELECT ON COMPANY TO PROCEDURE NEW_PROCEDURE;
GRANT EXECUTE ON PROCEDURE NEW_PROCEDURE TO SYSDBA;
3.2 Примеры использования встроенных функций
3.2.1 Count
select count(age) from phisicheskie_lica;
3.2.2 Max
select max(age) from phisicheskie_lica;
3.2.3 Substring
select (phisicheskie_lica.sname||''||substring(phisicheskie_lica.name from 1 for 1)||'.'||substring(phisicheskie_lica.pname from 1 for 1))
from phisicheskie_lica;
3.2.4 Extract
select extract(year from cast('now' as timestamp)) - extract(year from cast(:birthday as timestamp))
+ case when extract (month from cast('now' as timestamp)) >= extract (month from cast(:birthday as timestamp)) and
extract (day from cast('now' as timestamp)) >= extract (day from cast(:birthday as timestamp))
then 0 else -1 end
from rdb$database
3.2 Использование управляющих структур while do и if then else
SET TERM ^ ;
CREATE PROCEDURE SSP$DATE_INC (
adate date,
y smallint,
m smallint,
d smallint)
returns (
out_date date)
as
declare variable y0 smallint;
declare variable m0 smallint;
declare variable d0 smallint;
declare variable month_inc smallint;
begin
if( (:adate is null)
or (:y is null)
or (:m is null)
or (:d is null)) then exit;
y0 = extract(year from :adate) + :y;
m0 = extract(month from :adate);
if(:m > 0) then month_inc = 1;
else month_inc = -1;
while(:m <> 0) do begin
m0 = :m0 + :month_inc;
if(:m0 = 13) then begin m0 = 1; y0 = :y0 + 1; end
else if(:m0 = 0) then begin m0 = 12; y0 = :y0 - 1; end
m = :m - :month_inc;
end
d0 = extract(day from :adate);
while(:out_date is null) do begin
out_date = :y0 || '-' || :m0 || '-' || :d0;
end
out_date = :out_date + :d;
suspend;
end^
SET TERM ; ^
GRANT EXECUTE ON PROCEDURE SSP$DATE_INC TO SYSDBA;
4. Выводы
В лабораторной работе мы научились создавать хранимые процедуры, использовать встроенные функции и управляющие структуры.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.