Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / HELP!!! plpgsql: проблема с созданием функции. / 8 сообщений из 8, страница 1 из 1
15.02.2005, 13:08
    #32916261
Joel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP!!! plpgsql: проблема с созданием функции.
Здравствуйте! Я только начинаю работать с этим делом. У меня проблема с созданием функции (синтаксис). Я создал БД ( PostgreSQL). Нужна следующая функция: 1 таблица "Накладная". В ней число (дата) и количество товара. Эта таблица связана с другой таблицей "Товар", где я хочу сделать следующую операцию:
Товар.количество_товара = Товар.количество_товара + Накладная.количество_товара. Как мне это реализовать? Что должна возвращать функция ( триггер, integer, void )? Заранее благодарю за ответы.
...
Рейтинг: 0 / 0
15.02.2005, 13:23
    #32916306
HELP!!! plpgsql: проблема с созданием функции.
Какие поля будут во второй таблице? по какому полю они будут связаны? Пока не ясно, что ты хочешь.
...
Рейтинг: 0 / 0
15.02.2005, 13:23
    #32916307
oracle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP!!! plpgsql: проблема с созданием функции.
Подробнее опиши ситуацию, а то честно сказать что то не понятно что ты хочешь сделать. Может вообще без функции обойтись можно.

O*R*A*C*L*E
(Don't despair my little fried...)
...
Рейтинг: 0 / 0
15.02.2005, 15:56
    #32916875
mef
mef
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP!!! plpgsql: проблема с созданием функции.
ничего не понял...
наверное, имелось в виду не "Товар.количество_товара = Товар.количество_товара + Накладная.количество_товара" а "Накладная.количество_товара = Товар.количество_товара + Накладная.количество_товара" тогда это м.б. триггер на добавление товара. Хотя по прежнему опыту я бы предложил строить любую работу с товаром накладной (напр. набивать товар) только через временную таблицу, а потом (напр. по эвенту "сохранить") скопом сливал в постоянную и заполнял итоги в таблице накладной. И никогда не лазил напрямую.
PS: К постгресу вопрос не имеет отношения, это скорее "проектирование БД"
...
Рейтинг: 0 / 0
15.02.2005, 19:03
    #32917178
Joel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP!!! plpgsql: проблема с созданием функции.
Видимо, я не очень хорошо объяснил что хочу. Накладная.количество_товара = Товар.количество_товара + Накладная.количество_товара - это неверно. В таблице Накладная есть номер операции, число, название товара и его количество. В таблице ТОвар есть название товара, его общее количество на складе (общее количество!). Этого я хотел бы добиться с помощью функции ( работа c PostgreSQL). То есть автоматически после того, как заношу в таблицу Накладная все вышенаписанные данные происходит следующая операция: Товар.количество = Товар.количество + Накладная.количество ( у тех товаров, название которых одинаковое). Пример: пришло молоко
1/ Приход / 15.02.2004 / Молоко / 5 (литров). База данных у меня реляционная. Автоматически после этого в таблие товар происходит следующее: (молоко уже было к этому моменту, допустим, 6 литров), значит, данные о молоке после нового поступления будут: молок 6+5=11. То есть общее его количество. Надеюсь, теперь достаточно хорошо объяснил. Вот моя функция, которая не работает:

DECLARE
koli4 Nakladnaja;
koli4_ Tovar;

BEGIN

UPDATE Tovar SET koli4_ = koli4_ + koli4 WHERE Nakladnaja.tovar_id =
(SELECT tovar_id FROM Tovar);

COMMIT;
...
Рейтинг: 0 / 0
16.02.2005, 10:19
    #32917775
mef
mef
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP!!! plpgsql: проблема с созданием функции.
Вариантов решений несколько. Я бы так делал
Таблицы:
-"Номенклатура" - справочник товара - наименование, размеры, веса, ...
id_good ...
- "Приходы"
id_in ... здесь лежат "заголовки" накладных - дата, номер, поставщик, получатель (если товар может приходит на несколько юр. лиц) ...
-"Товары Приходов "
id_good_in, id_in, id_good, income_count (количество поступившего товара), income_stock (текущий остаток)...
- "Расходы" здесь лежат "заголовки" накладных - дата, номер, получатель, поставщик (если товар может отгружаться несколькими юр. лицами)...
id_out
-"ТоварыРасходов"
id_good_out, id_good_in, id_out, id_good, out_count (количество отгруженного товара)....
Всю обвязку прописывать лениво, а суть такая:
При добавлении товара в приход (записи в "Товары Приходов") значение ncome_count = income_stock, при отгрузке товар расхода вяжется к конкретному товару прихода, чей income_stock уменьшаетcя на out_count. Как выбирать, к какому товару прихода вязаться - зависит от схемы работы склада FIFO или FILO например.
Для удобства работы можно добавить таблицу "Остатки" - что-то типа текущего состояния склада, id_good и on_stock_count, где on_stock_count = либо sum(income_count) - sum(out_count) либо просто sum(income_stock) по каждому id_good. Первый вариант точнее, второй быстрее. И при отгрузке и при приходывании эта таблица тоже должна правиться. Содержимое таблицы показывается менеджеру при создании расхода.
Конечно и придётся пересчитывать и таблицу "Остатки" и поле income_stock - так как в них будут копиться ошибки.
При наличии нескольких складов нужна конструкция "Остатки" - "Товары остатков", или ещё одно поле id_stock в таблице "Остатки"

Сумбурно написал, но суть я думаю понятна
...
Рейтинг: 0 / 0
16.02.2005, 12:09
    #32918113
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP!!! plpgsql: проблема с созданием функции.
Joel

DECLARE
koli4 Nakladnaja;
koli4_ Tovar;

BEGIN

UPDATE Tovar SET koli4_ = koli4_ + koli4 WHERE Nakladnaja.tovar_id =
(SELECT tovar_id FROM Tovar);

COMMIT;???


авторDECLARE
--koli4 int4;--float8
--koli4_ int4;--float
BEGIN

UPDATE Tovar SET koli4 = Tovar.koli4 + N.koli4
FROM Nakladnaja N
WHERE Nakladnaja.tovar_id =
(SELECT tovar_id FROM Tovar);
RETURN NEW;
...
Рейтинг: 0 / 0
16.02.2005, 12:12
    #32918115
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HELP!!! plpgsql: проблема с созданием функции.
не все:
Joel
WHERE Nakladnaja.tovar_id =
(SELECT tovar_id FROM Tovar);
...


авторFROM Nakladnaja N
WHERE N.tovar_id = NEW.tovar_id ;
[/quot]
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / HELP!!! plpgsql: проблема с созданием функции. / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]