Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
15.02.2005, 13:08
|
|||
|---|---|---|---|
|
|||
HELP!!! plpgsql: проблема с созданием функции. |
|||
|
#18+
Здравствуйте! Я только начинаю работать с этим делом. У меня проблема с созданием функции (синтаксис). Я создал БД ( PostgreSQL). Нужна следующая функция: 1 таблица "Накладная". В ней число (дата) и количество товара. Эта таблица связана с другой таблицей "Товар", где я хочу сделать следующую операцию: Товар.количество_товара = Товар.количество_товара + Накладная.количество_товара. Как мне это реализовать? Что должна возвращать функция ( триггер, integer, void )? Заранее благодарю за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2005, 13:23
|
|||
|---|---|---|---|
|
|||
HELP!!! plpgsql: проблема с созданием функции. |
|||
|
#18+
Какие поля будут во второй таблице? по какому полю они будут связаны? Пока не ясно, что ты хочешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2005, 13:23
|
|||
|---|---|---|---|
HELP!!! plpgsql: проблема с созданием функции. |
|||
|
#18+
Подробнее опиши ситуацию, а то честно сказать что то не понятно что ты хочешь сделать. Может вообще без функции обойтись можно. O*R*A*C*L*E (Don't despair my little fried...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2005, 15:56
|
|||
|---|---|---|---|
HELP!!! plpgsql: проблема с созданием функции. |
|||
|
#18+
ничего не понял... наверное, имелось в виду не "Товар.количество_товара = Товар.количество_товара + Накладная.количество_товара" а "Накладная.количество_товара = Товар.количество_товара + Накладная.количество_товара" тогда это м.б. триггер на добавление товара. Хотя по прежнему опыту я бы предложил строить любую работу с товаром накладной (напр. набивать товар) только через временную таблицу, а потом (напр. по эвенту "сохранить") скопом сливал в постоянную и заполнял итоги в таблице накладной. И никогда не лазил напрямую. PS: К постгресу вопрос не имеет отношения, это скорее "проектирование БД" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
15.02.2005, 19:03
|
|||
|---|---|---|---|
|
|||
HELP!!! plpgsql: проблема с созданием функции. |
|||
|
#18+
Видимо, я не очень хорошо объяснил что хочу. Накладная.количество_товара = Товар.количество_товара + Накладная.количество_товара - это неверно. В таблице Накладная есть номер операции, число, название товара и его количество. В таблице ТОвар есть название товара, его общее количество на складе (общее количество!). Этого я хотел бы добиться с помощью функции ( работа 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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.02.2005, 10:19
|
|||
|---|---|---|---|
HELP!!! plpgsql: проблема с созданием функции. |
|||
|
#18+
Вариантов решений несколько. Я бы так делал Таблицы: -"Номенклатура" - справочник товара - наименование, размеры, веса, ... 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 в таблице "Остатки" Сумбурно написал, но суть я думаю понятна ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
16.02.2005, 12:09
|
|||
|---|---|---|---|
HELP!!! plpgsql: проблема с созданием функции. |
|||
|
#18+
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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=53&tablet=1&tid=2007441]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
136ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 435ms |

| 0 / 0 |
