![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 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; Объясните пожалуйста, как передать в процедуру список дорог? Создать массив? И как для каждой дороги из этого списка создать мост? Использовать курсоры, цикл? В общем, я не совсем представляю, как "связать" между собой список дорог и добавление мостов. |
![]() |
![]() |
![]() |
#2 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
![]()
Насколько я понял, у Вас должна быть процедура, которая делает первый Ваш select и затем для каждого найденного моста выполняет действия, предусмотренные процедурой add_bridge. Нужно ли при этом выделять эти действия в отдельную процедуру - вопрос другой. Но пока достаточно сделать for select и в теле вызвать add_bridge для каждого найденного idroad
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Хранимая процедура | 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 |