Консультация № 58741
13.10.2006, 09:01
0.00 руб.
0 1 1
Interbase/Firebird :Для примера есть таблица-справочник поставщиков SUPPLIER c полями ID и NAME
и основная таблица товары GOODS, где есть ключ IDSUPPLIER для поля SUPPLIER.ID.

Как создать хранимые процедуры или триггеры для:
1) Для добавления нового товара типа PROCEDURE ADDGOODS(..., SUPPLIERNAME, ....)
где SUPPLIERNAME название производителя. Она должна проверять наличие поставщика
в справочнике, если он есть, добавлять товар с найденным ID поставщика, если нет,
то добавлять поставщика (генератор SIPPLIER_ID_GEN), и добавлять новый IDSUPPLIER в новый товар.
2) При удалении поставщика проверять есть ли вхождения ID поставщика в таблице
товары, и если есть, выдавать ошибку/предупреждение и не удалять.

С Уважением,
Андрей

Обсуждение

Неизвестный
13.10.2006, 09:51
общий
это ответ
Здравствуйте, Андрей Побережный!
Есть ветка "СУБД и Delphi", Вы написали немного не туда. Начнем:
1) Проверить на наличие поставщика можно так:
в процедуре заведите переменную, например i
(declare variable i integer;). Делаете запрос к таблице SUPPLIER
select count(*)
from SUPPLIER S
where S.ID = :код_поставщика
into :i; -- возвращаем колличество записей поставщиков, если оно 0,
if (:i = 0) then
begin
-- то здесь добавляем поставщика, запоминаем IDSUPPLIER
end;
После этого вставляем новый товар.
2) Проверить вхождение ID поставщика в таблице товаров можно аналогично. Для выдачи предупреждения нужно зарегестрировати в базе исключение:
CREATE EXCEPTION EX_DEL ‘impossible delete record‘;
Если есть вхождение, генерируем исключение:
EXCEPTION EX_DEL; --операция удаления будет отменена.
Здесь описаны основные принципы, если будут вопросы - пишите на местный мини-форум.
Форма ответа