Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2017, 14:28   #1
nadya06
Новичок
Джуниор
 
Регистрация: 19.08.2017
Сообщений: 2
По умолчанию хранимая процедура

Всем привет. Есть 2 таблицы - дороги и мосты.

create table road
(idroad number NOT NULL CONSTRAINT road_p PRIMARY KEY,
road_name varchar2(250) NOT NULL,
road_beg_km number(8,3),
road_end_km number(8,3),
cortime date)

create table bridge
(idbridge number NOT NULL CONSTRAINT bridge_p PRIMARY KEY,
bridge_name varchar2(250) not null,
idroad number constraint bridge_r$rd references road(idroad) on delete cascade,
road_km number(8,3),
length_of_bridge (5,2),
cortime date)

Нужно написать процедуру добавления мостов на дорогах длиной более 10 километров, у которых отсутствуют мосты:
идентификатор моста генерируется как максимальное значение первичного ключа плюс 1,
имя моста "новый мост", километр моста равен половине длины дороги, длина моста = количеству символов наименования дороги

1. Получаем список дорог:

select idroad from road
where (road_end_km-road_beg_km)>10
and not exists
(select * from bridge
where bridge.idroad=road.idroad)

2. Добавление моста:

create or replace procedure add_bridge (id_road in int)
is

id_bridge int;
km number (8,3);
length_bridge number (8,3);

begin

select (max(idbridge)+1) into id_bridge from bridge;
select (road_end_km-road_beg_km)/2 into km from road where idroad=id_road;
select length (road_name) into length_bridge from road where idroad=id_road;

insert into bridge (idbridge, bridge_name, idroad, road_km, length_of_bridge, cortime)
values (id_bridge, 'новый мост', id_road, km, length_bridge, sysdate);

end;

Объясните пожалуйста, как передать в процедуру список дорог? Создать массив? И как для каждой дороги из этого списка создать мост? Использовать курсоры, цикл?
В общем, я не совсем представляю, как "связать" между собой список дорог и добавление мостов.
nadya06 вне форума Ответить с цитированием
Старый 20.08.2017, 16:04   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Насколько я понял, у Вас должна быть процедура, которая делает первый Ваш select и затем для каждого найденного моста выполняет действия, предусмотренные процедурой add_bridge. Нужно ли при этом выделять эти действия в отдельную процедуру - вопрос другой. Но пока достаточно сделать for select и в теле вызвать add_bridge для каждого найденного idroad
Black Fregat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хранимая процедура Muramidaza БД в Delphi 3 03.03.2014 15:01
Хранимая процедура mavlon_m SQL, базы данных 7 07.09.2013 15:15
Хранимая процедура Jrcfyf БД в Delphi 1 14.02.2012 18:45
Хранимая процедура Ellkat SQL, базы данных 0 22.05.2011 17:02
Хранимая процедура. nimf БД в Delphi 2 22.04.2008 13:16