Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
bd.doc
Скачиваний:
4
Добавлен:
01.11.2018
Размер:
119.81 Кб
Скачать

Функции

func.cgi

CREATE or replace function check_name (tekst varchar2)

return varchar2

IS

vychod varchar2(20);

kol integer;

BEGIN

vychod:=lower(rtrim(ltrim(tekst)));

kol:=length(vychod);

if kol>0 then

vychod:=replace(vychod,' ',' ');

vychod:=replace(vychod,'- ','-');

vychod:=replace(vychod,' -','-');

kol:=length(vychod);

for i in 1..kol loop

if instr('-aheliobcdefghijklmnopqrstuvwxyz ', substr(vychod,i,1))=0 then

vychod:='0';

exit;

end if;

end loop;

else

vychod:='0';

end if;

if vychod<>'0' then

vychod:=initcap(vychod);

end if;

return vychod;

END check_name;

/

CREATE or replace function check_transm (tekst varchar2)

return varchar2

IS

res varchar2(20);

kol integer;

BEGIN

res:=lower(rtrim(ltrim(tekst)));

kol:=length(res);

if kol>0 then

res:=replace(res,' ',' ');

res:=replace(res,'- ','-');

res:=replace(res,' -','-');

kol:=length(res);

for i in 1..kol loop

if instr('4rfwd', substr(res,i,1))=0 then

res:='0';

exit;

end if;

end loop;

else

res:='0';

end if;

if res<>'0' then

res:=initcap(res);

end if;

return res;

END check_transm;

/

Триггеры

trigger.sql

CREATE OR REPLACE TRIGGER racercontrol

BEFORE INSERT ON racer

FOR EACH ROW

DECLARE

err_soname EXCEPTION;

err_name EXCEPTION;

BEGIN

:new.racer_soname := check_name(:new.racer_soname);

:new.racer_name := check_name(:new.racer_name);

IF :new.racer_soname = '0' THEN RAISE err_soname; END IF;

IF :new.racer_name = '0' THEN RAISE err_name; END IF;

EXCEPTION

WHEN err_soname THEN RAISE_APPLICATION_ERROR(-20040,

'Soname must include only english letters, ` ` & `-`! '||

'Soname must starting at high register letter!');

WHEN err_name THEN RAISE_APPLICATION_ERROR(-20041,

'Name must include only english letters, ` ` & `-` ! '||

'Name must starting at high register letter!');

WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20999,

'Any another error..');

END racercontrol;

/

CREATE OR REPLACE TRIGGER carcontrol

BEFORE INSERT ON car

FOR EACH ROW

DECLARE

err_car EXCEPTION;

BEGIN

:new.transmission := check_transm(:new.transmission);

IF :new.transmission = '0' THEN RAISE err_car; END IF;

EXCEPTION

WHEN err_car THEN RAISE_APPLICATION_ERROR(-20040,

'Soname must include only next symbols: '||

'4, R, W, D, F !');

WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20999,

'Any another error..');

END racercontrol;

/

Удаление

drop.cgi:

drop table record;

drop table results;

drop table truck;

drop table car;

drop table racer;

drop table team;

drop table champ;

drop function check_name;

drop function check_transm;

Примеры запросов

Пример 1

Действие: получить название всех комманд, участвующих в чемпионате STCC.

select team_name from team where champ_name='STCC';

TEAM_NAME

-------------------------

Volvo S40 Racing

Kristoffersson Motorsport

Crawford Nissan Racing

Picko Troberg Racing

Svenska Honda Bilimport

Samsung BMW Dealer Team

Euro Racing

Jan Lindblom Racing

ETAB Data

Chrysler Jeep Sverige

Team Polo Motorsport

AH Racing

Krokstrom.se

Georg Bakajev Motorsport

Frank Valle Motorsport

15 строк выбрано.

Пример 2:

Действие: полученить название трасс и рекорд прохождениея круга на них, поставленных пилотом Tommy Rustad.

select tr_name, cycle_rec from record where car_num in (select car_num from racer where racer_name='Tommy' and racer_soname='Rustad');

TR_NAME CYCLE_REC

------------------------- ----------

Scandinavian Raceway 96

Karlskoga Motor Stadion 66

Mantorp Park Short 49

Arctic Circle Raceway 88

Пример 3:

Действие: получить модель автомобиля, у которого его командным спонсором выступает корпорация Neste.

select car_model from car where team_name in (select team_name from team where titul_sponsor='Neste');

CAR_MODEL

--------------------

Ford Mondeo

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]