
Функции
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