Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
HELP!!! plpgsql: проблема с созданием функции.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Я только начинаю работать с этим делом. У меня проблема с созданием функции (синтаксис). Я создал БД ( PostgreSQL). Нужна следующая функция: 1 таблица "Накладная". В ней число (дата) и количество товара. Эта таблица связана с другой таблицей "Товар", где я хочу сделать следующую операцию: Товар.количество_товара = Товар.количество_товара + Накладная.количество_товара. Как мне это реализовать? Что должна возвращать функция ( триггер, integer, void )? Заранее благодарю за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2005, 13:08 |
|
||
|
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, 13:23 |
|
||
|
HELP!!! plpgsql: проблема с созданием функции.
|
|||
|---|---|---|---|
|
#18+
ничего не понял... наверное, имелось в виду не "Товар.количество_товара = Товар.количество_товара + Накладная.количество_товара" а "Накладная.количество_товара = Товар.количество_товара + Накладная.количество_товара" тогда это м.б. триггер на добавление товара. Хотя по прежнему опыту я бы предложил строить любую работу с товаром накладной (напр. набивать товар) только через временную таблицу, а потом (напр. по эвенту "сохранить") скопом сливал в постоянную и заполнял итоги в таблице накладной. И никогда не лазил напрямую. PS: К постгресу вопрос не имеет отношения, это скорее "проектирование БД" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2005, 15:56 |
|
||
|
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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2005, 19:03 |
|
||
|
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, 10:19 |
|
||
|
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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 12:09 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=32917775&tid=2007441]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 405ms |

| 0 / 0 |
